GC问题汇总
一、系统不停地进行Major GC
1、情景描述
系统不停地进行Major GC,每隔十几秒就会就行一次Major GC,Remark时间超过1s,CMS-concurrent-abortable-preclean-start超过5s,Minor GC频率还算正常。参考下图:
系统频繁Major GC图.png
CMSInitiatingOccupancyFraction值为70,但通过jstat -gcutil发现老年代一直都是超过70%,说明Major GC对老年代没起多大作用,崩溃有木有。
jstat查看堆各部分情况.png
2、解决
可以先用jmap,dump出当前堆信息,然后用jhat来分析,发现有一个HashMap相当大。这个时候我觉得可以分析下代码了。最后看代码,是因为服务启动时,初始化了mongo的数据到内存中,并且量很大,直接放入了老年代且无法回收造成的。要解决只能调大内存或者业务上可以妥协的话,把这部分常驻内存的代码给去掉。
二、Minor GC时一直出现Allocation Failure
1、情景描述
Minor GC时一直出现Allocation Failure的现象,起初以为是严重的GC问题,后来谷歌大半天,发现这是Java 1.8特有的Minor GC时的提示,表示新生代伊甸区已经满了,需要进行GC了,但这个提示非常不友好,导致很多人以为服务出现了问题,实际上并不需要care啦。
网友评论