concurrent mode failure 是什么原因引起的,有什么现象?应该调整什么参数


这个错误是cms专有错误,并发清楚线程和工作线程同时工作,清理出来年老代的空间不足以存放由新生代晋升导年老代的对象

从而导致年老代垃圾回收变成了Serial Old,从而暂停应用程序,停顿时间过长

现象: 

(concurrent mode failure): 1048576K->185976K(1048576K), 1.4906868 secs] 1520447K->185976K(1520448K), [Metaspace: 140571K->140571K(1183744K)], 1.4909291 secs] [Times: user=1.96 sys=0.00, real=1.49 secs]

Heap after GC invocations=27553 (full 48):
 par new generation   total 471872K, used 0K [0x00000000a0000000, 0x00000000c0000000, 0x00000000c0000000)
  eden space 429456K,   0% used [0x00000000a0000000, 0x00000000a0000000, 0x00000000b99a0000)
  from space 51413K,   0% used [0x00000000bccd0000, 0x00000000bccd0000, 0x00000000c0000000)
  to   space 52416K,   0% used [0x00000000b99a0000, 0x00000000b99a0000, 0x00000000bccd0000)
 concurrent mark-sweep generation total 1048476K, used 183976K [0x00000000c0000000, 0x0000000100000000, 0x0000000100000000)
 Metaspace       used 140571K, capacity 152156K, committed 152836K, reserved 1183744K
  class space    used 15971K, capacity 18769K, committed 18896K, reserved 1048576K
}

可能原因:1 年轻代产生大对象直接放入年老代,- XX:PretenureSizeThreshold = <字节大小>(默认为0,即不直接在年老代创对象,且该参数只对serial 和parallel new收集器有效)所以一般要检查代码,避免创建大量的大对象

                 2 cms触发太晚(一般默认值,不会这个原因造成) -XX:CMSInitiatingOccupancyFraction=N调小

                 3 内存碎片太多,

                      -XX:+UseCMSCompactAtFullCollection (空间碎片整理)

                    -XX:CMSFullGCsBeforeCompaction=n

                  4 检查年轻代年老代比例是否合适

                    晋升阈值过小,可以根据对象大小或年纪来调(一般默认即可);

                     Survivor,Eden年轻代过小,导致晋升速率提高

                


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM