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是否是内存分配