簡體   English   中英

完整GC時並發模式失敗

[英]Concurrent mode failure, while Full GC

我面臨並發模式故障,由於我的應用程序響應緩慢。 正如我看到許多博客建議降低占用率和檢查,這是並發模式故障的唯一解決方案嗎?



    CMS: abort preclean due to time 2015-09-16T23:18:41.306+0200: 3847212.463: [CMS-concurrent-abortable-preclean: 4.934/5.444 secs] [Times: user=5.00 sys=0.01, real=5.45 secs]
    2015-09-16T23:18:41.311+0200: 3847212.467: [GC[YG occupancy: 266211 K (436928 K)]3847212.467: [Rescan (parallel) , 0.1478990 secs]3847212.615: [weak refs processing, 0.0000180 secs] [1 CMS-remark: 3073996K(4718592K)] 3340208K(5155520K), 0.1480950 secs] [Times: user=1.57 sys=0.01, real=0.15 secs]
    2015-09-16T23:18:41.460+0200: 3847212.616: [CMS-concurrent-sweep-start]
    2015-09-16T23:18:44.204+0200: 3847215.360: [CMS-concurrent-sweep: 2.738/2.744 secs] [Times: user=2.76 sys=0.00, real=2.74 secs]
    2015-09-16T23:18:44.204+0200: 3847215.360: [CMS-concurrent-reset-start]
    2015-09-16T23:18:44.215+0200: 3847215.371: [CMS-concurrent-reset: 0.010/0.010 secs] [Times: user=0.01 sys=0.00, real=0.02 secs]
    2015-09-16T23:18:46.221+0200: 3847217.377: [GC [1 CMS-initial-mark: 3073996K(4718592K)] 3347513K(5155520K), 0.3326130 secs] [Times: user=0.33 sys=0.00, real=0.33 secs]
    2015-09-16T23:18:46.554+0200: 3847217.710: [CMS-concurrent-mark-start]
    2015-09-16T23:18:46.926+0200: 3847218.083: [Full GC 3847218.083: [CMS2015-09-16T23:18:50.249+0200: 3847221.405: [CMS-concurrent-mark: 3.688/3.695 secs] [Times: user=13.96 sys=0.31, real=3.70 secs]
     (concurrent mode failure): 3073996K->3011216K(4718592K), 20.7183280 secs] 3348996K->3011216K(5155520K), [CMS Perm : 262143K->40538K(262144K)], 20.7185010 secs] [Times: user=29.87 sys=0.31, real=20.71 secs]
    2015-09-16T23:27:27.701+0200: 3847738.857: [GC 3847738.858: [ParNew: 349568K->28669K(436928K), 0.0532300 secs] 3360784K->3039885K(5155520K), 0.0534380 secs] [Times: user=0.14 sys=0.00, real=0.05 secs]
    2015-09-16T23:33:43.242+0200: 3848114.399: [GC 3848114.399: [ParNew: 378237K->14730K(436928K), 0.0492570 secs] 3389453K->3025946K(5155520K), 0.0494510 secs] [Times: user=0.14 sys=0.00, real=0.05 secs]
    2015-09-16T23:41:35.879+0200: 3848587.035: [GC 3848587.035: [ParNew: 364298K->15247K(436928K), 0.0524070 secs] 3375514K->3026463K(5155520K), 0.0525940 secs] [Times: user=0.15 sys=0.00, real=0.05 secs]
    

以下是JVM參數設置:



    -server
    -d64
    -Xms2048M
    -Xmx2048M
    -XX:+DisableExplicitGC
    -XX:NewSize=512M
    -XX:MaxNewSize=512M
    -XX:SurvivorRatio=4
    -XX:PermSize=256M
    -XX:MaxPermSize=256M
    -XX:+UseParNewGC
    -XX:+UseConcMarkSweepGC
    -XX:CMSInitiatingOccupancyFraction=65
    -XX:+UseCMSInitiatingOccupancyOnly
    -XX:+CMSPermGenSweepingEnabled
    -XX:MaxTenuringThreshold=30

鑒於您將CMSInitiatingOccupancyFraction設置為65%,如果您需要進一步降低它,我會感到驚訝。 根據您上傳的日志,您的問題的強大候選人似乎是預清潔階段。 從您的日志中,我看到幾條消息開頭:

CMS:因時間而中止預清潔

這意味着並發預清潔階段(你的CMS GC基本上可以加速並降低后來停止世界停頓的可能性)正在中止,所以世界上的停頓將比他們需要的更頻繁成為。

因此,您應該考慮增加預清潔階段的超時。 這可以通過手動將-XX:CMSMaxAbortablePrecleanTime JVM參數設置為大於5秒的值來完成。

我對此做了一些研究,並且已經有一個很好的StackOverflow Q / A關於“由於時間而中止預清潔”問題。 還有一個很好的Oracle博客,詳細介紹了CMS收集器的不同階段,包括描述CMS收集器的預清潔階段實際上做了什么 最后一個參考詳細介紹了CMSMaxAbortablePrecleanTime JVM參數語法

另外,您可以在此處為JVM提供多個調整參數。 雖然他們可能在幫助表現,但他們也可能不會。 實際上,設置多個JVM參數通常會限制JVM優化自定義應用程序的垃圾收集的能力。 請考慮嘗試刪除其中一些調整參數,以改善性能問題。

暫無
暫無

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

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