CMS收集器中两个致命的问题
CMS
是一个很好的并发垃圾收集器,但是使用过程中会产生两个重要的问题。
- promotion failed 晋升失败
- concurrent mode failure 收集器无法处理浮动垃圾
promotion failed 晋升失败原因
该问题发生在
Minor GC
过程中,Survivor Space
放不下转移的对象,老年代也放不下(promotion failed发生的时候老年代CMS还没有机会进行回收,又放不下转移到老年代的对象,下一步就会产生concurrent mode fialure
,发生STW降级为Serial Old)
下面是一条
promotion failed
失败的日志
106.641: [GC 106.641: [ParNew (promotion failed): 14784K->14784K(14784K), 0.0370328 secs]106.678: [CMS106.715: [CMS-concurrent-mark: 0.065/0.103 secs] [Times: user=0.17 sys=0.00, real=0.11 secs]
(concurrent mode failure): 41568K->27787K(49152K), 0.2128504 secs] 52402K->27787K(63936K), [CMS Perm : 2086K->2086K(12288K)], 0.2499776 secs] [Times: user=0.28 sys=0.00, real=0.25 secs]
concurrent mode failure产生的原因
concurrent mode failure
是CMS
特有的错误,CMS
的垃圾清理线程和用户线程是并行进行的. 老年代正在清理,从年轻代晋升了新对象,或者分配的大对象在新生代放不下,直接在老年代分配内存,这时老年代也放不下,则会抛出concurrent mode failure
concurrent mode failure的影响
老年代的垃圾收集器从
CMS
退化成Serial Old
,所有用户线程被暂停,停顿时间变长。
解决方案
CMS触发太晚
-XX:CMSInitiatingOccupancyFraction=N
是指设定CMS在对内存占用率达到N%的时候开始GC(因为CMS会有浮动垃圾,所以一般都较早启动GC);
- 将:
-XX:CMSInitiatingOccupancyFraction=N
调小
空间碎片太多
开启空间碎片整理,并将空间碎片整理周期设置在合理范围,-
XX:CMSFullGCsBeforeCompaction
作用:设置在执行多少次Full GC后对内存空间进行压缩整理。
- -XX:+UseCMSCompactAtFullCollection (空间碎片整理)
- -XX:CMSFullGCsBeforeCompaction=n
垃圾产生太快
- 晋升阈值太小
- Survivor空间过小
- Eden区过小,导致晋升速率过快
- 存在大对象
CMS收集器中两个致命的问题相关推荐
- (七)JVM成神路之GC分代篇:分代GC器、CMS收集器及YoungGC、FullGC日志剖析
引言 在<GC基础篇>中曾谈到过分代以及分区回收的概念,但基础篇更多的是建立在GC的一些算法理论上进行高谈阔论,而本篇则重点会对于分代收集器的实现进行全面详解,其中会涵盖串行收集器.并行收 ...
- 27.垃圾收集器(Serial收集器、ParNew收集器、Parallel收集器、Parallel Old 收集器、CMS收集器、G1收集器、常用的收集器组合)
27.垃圾收集器 27.1.Serial收集器 27.2.ParNew收集器 27.3.Parallel收集器 27.4.Parallel Old 收集器 27.5.CMS收集器 27.6.G1收集器 ...
- JVM实用参数(七)CMS收集器
原文连接 本文连接 译者: iDestiny 校对:梁海舰 HotSpot JVM的并发标记清理收集器(CMS收集器)的主要目标就是:低应用停顿时间.该目标对于大多数交互式应用很重要,比如web应 ...
- 垃圾收集器(CMS收集器 , G1收集器…)
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,以下讲 ...
- 一网打尽!CMS收集器和G1收集器的区别
CMS 收集器 CMS(Concurrent Mark Sweep)收集器是一种以获取最短回收停顿时间为目标的收集器.它非常符合在注重用户体验的应用上使用. CMS(Concurrent Mark S ...
- java io null异常,java.io.IOException:所有收集器的初始化失败。最后一个收集器中的错误是:null...
我是MapReduce的新手,我试图找到问题的解决方案.我试图链接两个地图reduce作业.第一份工作正在执行,但在第二份工作上我是得到一个错误如下java.io.IOException:所有收集器的 ...
- CMS收集器与G1收集器
说明:本文摘自<深入理解Java虚拟机>,是自己看书总结文章.以下正文开始 收集器中的***并行(Parallel)***语义:指多条垃圾收集线程并行工作,但此时用户线程仍处于等待状态 收 ...
- CMS收集器和G1收集器,优缺点对比
点击上方关注"Java后端技术栈" 很多面试题都会涉及CMS收集器和G1收集器,这里面有一个非常重要的知识点:G1只有并发标记才不会stop-the-world,其他都会停下来. ...
- CMS收集器几个参数详解 -XX:CMSInitiatingOccupancyFraction, CMSFullGCsBeforeCompaction
CMSInitiatingOccupancyFraction -XX:CMSInitiatingOccupancyFraction这个参数是指在使用CMS收集器的情况下,老年代使用了指定阈值的内存时, ...
最新文章
- 腾讯面试官问我Java中boolean类型占用多少个字节?我说一个,面试官让我回家等通知...
- 肠·道 | 朱元方:产检消毒恐误伤菌脉,6大举措则促菌脉相承
- 2011年度最佳10款免费的 WordPress 主题
- 绿网天下:上云解决系统安全和安全合规
- 为什么你写的拦截器中不能注入Java bean?
- Mybatis框架 导入/导出功能的实现
- 16种oracle查询日期语句
- 蓝桥杯2020年第十一届C/C++国赛B组第二题-扩散
- DBLE分库分表示例
- vue swiper click失效
- IDEA如何在包下面继续建包
- to be solved
- duang!各位期待的傻猴更新稳定版来了~
- wordpress搜索引擎蜘蛛统计插件SEO
- BJTUOJ 1853 gangpener买零食(水~)
- iOS字体 动态下载系统提供的多种中文字体
- 【Codeforces】964B Messages【乱搞】
- Windows CE.net的智能…
- 官方认定!IT程序员正式成为“新生代农民工”-道合顺大数据
- 计算机控制系统的五种类型,计算机控制系统习题(1-5章