回答
要排查 Full GC 频繁执行的原因,我们首先需要了解哪些情况会触发 Full GC,主要情况有如下几种:
- 老年代不足
- 元空间不足
- 显示调用
System.gc()
- 大对象直接进入老年代
- 空间分配担保机制失败
- CMS 时出现
promotion failed
和concurrent mode failure
详情情况请阅读:什么情况下会触发 Full GC?
一般排查步骤大致如下:
首先我们需要下掉一台服务器的流量,保护好现场,然后把其他服务器重启,恢复服务。然后就是找运维要 dump 文件和 GC 日志文件分析了。
- 一、检查 JVM GC日志
通过分析 GC 日志,我们可以看到触发 Full GC 的条件,如下:
12.345: [Full GC (Allocation Failure) [PSYoungGen: 1280K->0K(1536K)] [ParOldGen: 8192K->6144K(8192K)] 9472K->6144K(9728K), [Metaspace: 512K->512K(1024K)], 0.1234 secs]