用Arthas快速定位线上JVM问题!

Arthas分析FullGC问题定位

       对于FullGC那一定不会陌生,一般来说会采用横切FullGC前置拦截(-XX:+HeapDumpBeforeFullGC)和后置拦截(-XX:+HeapDumpAfterFullGC),导出FullGC发生前后的heap dump文件,以便于我们进行FullGC原因的分析和定位。

推测分析问题之FullGC的频率过高

       我们如果希望可以观测到相关的GC回收次数以及相关的时间,除Java原生的jstat指令之外,还可以通过dashboard看板中的GC子面板(整体部分的右下角)部分,如下图1所示。

        我们通过分析以及观察到相关的FullGC频率过高,所以可以针对性的获取相关的FullGC前后n(3~5)组的heap dump文件。分析每次FullGC前后的对象数量和空间的较为靠前的对象信息,从而得到综合评判得出FullGC过于频繁结论,分析的要点:

l分析其创建的数量过程为什么过多,以及占用内存剧增的原因。

l分析其创建的数量的内存空间为什么会生命周期过长会迁移到老年代。

l是否存在担保分配机制导致直接在老年代分配,以及对象大小是否过大,导致动态年龄跃升。

l是否提前进入老年代的门槛过低(XX:PretentureSizeThreshold ),导致跃升。

l是否是内存分配不符合业务场景直接进行扩充老年代以及新生代的内存分配值,减少FullGC。

推测分析问题之FullGC的时间过长

       当JVM虚拟机出现FullGC且耗时超过1秒的时候,我们就认为FullGC时间过长,如果存在这种情况,就必须重视起来了,至于如何分析FullGC的问题呢?笔者主要总结了一下几点,希望可以帮助大家排查问题和梳理思路。

l新生代内存空间分配过小:如果新生代过小,对象将会过早的晋升至Old区,而Old区的垃圾回收工作一般较新生代会耗费更多的时间,因此,可利用增大新生区空间来有效地减少GC的停顿时间

l最优的GC回收器:GC回收器是影响GC停止时间的一个十分关键的原因,所以个人建议选择用G1收集器,由于G1回收器是自动调优的,你只需设定一个停止时间的目标,例如:-XX:MaxGCPauseMillis=200。

l发生了热交换内存&#

猜你喜欢

转载自blog.csdn.net/WXF_Sir/article/details/131702174