1、根据GC日志及HBASE日志分析如下:绝大部分情况下,regionsever宕机发生时,JVM都会触发concurrent mode failure。
出现此现象的原因主要有三个:
第一:CMS触发太晚了,CMS GC触发时,年老代所剩下的空间不足以满足新对象对空间分配请求
1、降低触发CMS的阀值,前期已新增参数(-XX:CMSInitiatingOccupancyFraction=70),但是该参数只在首次CMS GC时生效,后续CMS GC的触发依赖其自身的算法。dataproc批处理期间,内存中的垃圾增加太快,增加参数(XX:+UseCMSInitiatingOccupancyOnly),在年老代占用70%的情况下,就开始CMS GC。
-XX:+UseCMSInitiatingOccupancyOnly
第二:年老代碎片太多,当还没有达到默认进行CMS GC的情况下,却满足不了从新生代转进来的“大对象”。
1、配置参数每次进行CMS GC 时都进行碎片整理(当前参数为 1,建议改为 0)
-XX:CMSFullGCsBeforeCompaction=0
第三:垃圾产生速度超过清理速度,Survivor空间过小,导致溢出
1、配置下列参数,增大survivor space
-XX:SurvivorRatio=3