在嘗試了許多不同的JVM GC設置並進行了大量測試之後,我遇到了長時間的主要GC暫停問題,現在我正在使用G1GC JVM GC進行測試。除此之外,我還使用性能監視器收集數據,並且只有正在運行的應用程序(系統服務旁邊......)是GlassFish服務器和我的應用程序。在性能監視器日誌中我沒有發現任何奇怪的東西(CPU使用率約爲5-10%,GC發生時會稍微高一點,內存使用率約爲60%......)。現在是測試的第五天,我注意到以下幾點:JVM GC的工作非常奇怪
直到第二次發生重大(混合)GC一切都很好(小GC大約20毫秒長,GC表現160000M/S,...) 。第二個主要的GC花費了大約2秒(長 - 首先花費了150ms,但不是關鍵),之後小GC比以前長得多(參見圖中灰色線代表較小(年輕)GC的持續時間)和GC性能僅爲12000M/s,仍在下降。我想知道爲什麼在第二個主要的GC之後發生這種情況,即使沒有其他應用程序正在運行,並且CPU /內存使用情況與以前相同。我不知道這裏發生了什麼事。我還有一個問題 - 我在不同的PC上運行相同的測試,它具有較少的RAM和較舊的處理器和GC性能,大約爲5000M/s(小型GC大約爲50-100ms),我認爲這是正常的,因爲處理器更糟糕和更少的RAM。奇怪的是,主要的GC在運行3天后還沒有發生,而老一代的增長速度比這裏慢得多,即使設置相同。爲什麼增長要慢得多(這裏兩天約150MB,三天約80MB)?謝謝你所有的答案,我不知道爲什麼GC表現異常(首先它工作正常,然後表現惡化)。
編輯:here是在GCViewer進口,還事件從GCViewer詳細統計完整的GC日誌文件:
日誌中的第三個主要GC:
2015-06-08T08:09:13.123+0200: 572815.533: [GC concurrent-root-region-scan-start]
2015-06-08T08:09:13.139+0200: 572815.560: [GC concurrent-root-region-scan-end, 0.0271771 secs]
2015-06-08T08:09:13.139+0200: 572815.560: [GC concurrent-mark-start]
2015-06-08T08:09:16.302+0200: 572818.721: [GC concurrent-mark-end, 3.1612900 secs]
2015-06-08T08:09:16.318+0200: 572818.729: [GC remark 572818.729: [Finalize Marking, 0.0002590 secs] 572818.729: [GC ref-proc, 0.4479462 secs] 572819.177: [Unloading, 3.2004912 secs], 3.6499382 secs]
[Times: user=0.20 sys=0.08, real=3.64 secs]
再次,真正的時間遠遠高於用戶+ sys,卸載階段耗時3秒以上。
請說明什麼顏色的含義,什麼是這個生長線代表。我們可以在這裏看到主要GC的持續時間嗎?如果是的話,他們在哪裏? – AdamSkywalker
您能提供感興趣的時間跨度的原始GC日誌嗎?也請務必使用'-XX:+ PrintGCDetails'登錄 – the8472
好吧,紫色線是終身(舊)代,藍色線用於堆(所以基本上是年輕一代,因爲它始於老一代線),下面的灰線是次要的GC時間,主要的GC時間(老一代同時收集;不是完整的GC)是兩條黃色線,堆大小下降(首先需要0.1秒,接近2秒)。此圖來自GCViewer應用程序。我會立即上傳原始GC日誌。 – user4341206