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年轻代过小,导致晋升速率提高
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现