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年轻代过小,导致晋升速率提高

                

posted @   清明雨下  阅读(1231)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示