簡體   English   中英

Full GC(堆檢查啟動的 GC)

[英]Full GC (Heap Inspection Initiated GC)

我正在努力尋找我們生產 JVM 上的“Full GC”。 每天在午夜左右,STW 會在沒有明顯原因的情況下發生,持續 10-11 秒非常致命。 這是gc日志:

Java HotSpot(TM) 64-Bit Server VM (25.131-b11) for windows-amd64 JRE (1.8.0_131-b11), built on Mar 15 2017 01:23:53 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 16584284k(13074876k free), swap 23137624k(18439472k free)
CommandLine flags: -XX:GCLogFileSize=1024000 -XX:InitialHeapSize=11811160064 -XX:+ManagementServer -XX:MaxHeapSize=11811160064 -XX:NumberOfGCLogFiles=10 -XX:+PrintGC -XX:+PrintGCDateStamps -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseGCLogFileRotation -XX:-UseLargePagesIndividualAllocation -XX:+UseParallelGC 
...
2020-01-17T00:00:04.411+0200: 113734.053: [GC (Heap Inspection Initiated GC) [PSYoungGen: 522474K->146371K(3387904K)] 6946079K->6573263K(11077632K), 0.1786961 secs] [Times: user=0.67 sys=0.02, real=0.18 secs] 
2020-01-17T00:00:04.592+0200: 113734.233: [Full GC (Heap Inspection Initiated GC) [PSYoungGen: 146371K->0K(3387904K)] [ParOldGen: 6426892K->3217828K(7689728K)] 6573263K->3217828K(11077632K), [Metaspace: 81937K->81809K(1126400K)], 11.4447857 secs] [Times: user=44.06 sys=0.20, real=11.44 secs] 

“堆檢查啟動的 GC”實際上是什么意思? 誰發起這項檢查,為什么? 除了它是由我們不使用的一些工具(如 jmap、jmc ......)引起的之外,我沒有找到任何關於它的有意義的信息。

任何提示或方向都受到高度贊賞。

JVM代理也可以觸發堆檢查 要了解當前時刻對象的活躍度,您需要觸發Full GC調用。 我想在Shenandoah和/或ZGC情況下,這會“便宜”很多,因為它們與您的應用程序同時工作。 更有趣的是,至少在理論上,並發GC不需要觸發所有階段( mark就足夠了)來查找活動和/或死亡的階段。 然而,我懷疑他們不做compaction

如果您真的很關心STW事件,那么ParallelGC可能不是一個很好的開始選擇。 以垃圾算法的名義Parallel應該敲響警鍾:它的所有階段都與應用程序並行; 並發。

引用Spectator Docs - GC 原因

Heap_Inspection_Initiated_GC

GC 是由對堆的檢查操作啟動的。 例如,您可以使用jmap觸發此操作:

 $ jmap -histo:live <pid>

另請參閱JMC Flight Recording 是否強制執行 Full GC? (答案:是的,如果啟用堆統計)
另請參閱jcmd PID GC.class_histogram在收集數據之前jcmd PID GC.class_histogram調用完整的 GC? (答案:是)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM