簡體   English   中英

G1GC非常高的GC數和CPU,非常頻率的GC會破壞性能

[英]G1GC very high GC count and CPU, very frequency GCs that kill performance

我最近將我的Java應用程序從CMS + ParNew切換到了G1GC。 我在切換時觀察到的是CPU使用率更高,GC計數+暫停時間也增加了。 切換前我的JVM標志是

 java -Xmx22467m -Xms22467m -XX:NewSize=11233m -XX:+UseConcMarkSweepGC -XX:AutoBoxCacheMax=1048576 -jar my-application.jar

切換后我的標志是:

java -Xmx22467m -Xms22467m -XX:+G1GC -XX:AutoBoxCacheMax=1048576 -XX:MaxGCPauseMillis=30 -jar my-application.jar

我遵循了Oracle的最佳實踐http://www.oracle.com/technetwork/tutorials/tutorials-1876574.html

Do not Set Young Generation Size

並沒有設定年輕一代的規模。 但是我懷疑年輕一代是這里的問題。 我看到的是堆使用量在~6 - 8 GB之間波動。 堆使用情況

以前,使用CMS和Par New,內存使用量增長到4-16 GB之間,然后才看到GC: 在此輸入圖像描述

我不確定我理解為什么使用G1GC GC會如此頻繁。 我不確定在使用G1GC進​​行GC調整時我缺少什么。

我正在使用Java 8:ava版本“1.8.0_144”Java(TM)SE運行時環境(版本1.8.0_144-b01)Java HotSpot(TM)64位服務器VM(版本25.144-b01,混合模式)

我感謝您的幫助。

更新 :有關這些暫停的更多信息: 在此輸入圖像描述 你可以看到所有這些停頓都是G1New,看起來它們和我的目標暫停時間一樣長,即30ms。 當我在切換到G1GC之前查看ParNew暫停時,這就是它的樣子: 在此輸入圖像描述 因此它們也都是年輕的gen集合(ParNew),但它們不那么頻繁和更短,因為它們只在堆使用量達到14GB左右時發生(根據圖表)

我仍然無能為力為什么G1New如此早發生(就堆使用而言)

更新2我還注意到NewRatio = 2,我不知道G1GC是否尊重這一點,但這意味着我的新Gen上限為7GB。 這可能是原因嗎?

更新3添加G1GC GC日志: https ://drive.google.com/file/d/1iWqZCbB-nU6k_0-AQdvb6vaBSYbkQcqn/view?usp = sharing

GC日志顯示平均GC暫停間隔為2秒,每個間隔大約30-40ms,相當於應用程序吞吐量約95%。 這並不等於“殺死性能”領域。 至少不是由於GC暫停。

但是,G1會執行更多的並發工作,例如,為了記住集合細化,您的暫停似乎在更新/掃描RS中花費一些時間,因此我假設並發GC線程也很忙,即它可能需要在GC暫停之外的額外CPU周期,這是默認情況下,日志未涵蓋,您需要+G1SummarizeRSetStats 如果延遲更重要,您可能希望為機器分配更多內核,如果吞吐量更重要,您可以調整G1以在暫停期間執行更多RS更新(以增加暫停時間為代價)。

我能夠看到復制對象所花費的時間非常重要。 在對象被提升為Tenured Generation之前,看起來G1GC默認有15代。 我把它減少到1( -XX:MaxTenuringThreshold=1

此外,我不知道如何在日志中確認它,但是可視化GC日志我看到年輕一代正在不斷調整大小,從最小尺寸到最大尺寸。 我縮小了范圍,也提高了性能。

看這里https://docs.oracle.com/javase/9​​/gctuning/garbage-first-garbage-collector-tuning.htm#JSGCT-GUID-70E3F150-B68E-4787-BBF1-F91315AC9AB9我試圖找出是否粗糙確實是個問題。 但它只是說設置gc + remset = trace我不明白如何在命令行中傳遞給java,如果它甚至可以在JDK 8中使用,我增加了XX:G1RSetRegionEntries以防萬一。

我希望它對未來的G1GC調諧器有所幫助,如果其他人有更多的建議會很棒。

我仍然看到[Processed Buffers]在年輕的疏散中仍然需要很長時間,並且[Scan RS]在混合收藏中很長。 不知道為什么

暫無
暫無

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

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