线上 GC 问题快速定位¶
一、看现象¶
- 接口慢。
- CPU 高。
- 接口超时。
二、第一步:看 GC 日志¶
或者 JDK 8:
看什么¶
- GC 频率(Minor GC 每秒一次?)。
- GC 停顿时间(超过 200ms?)。
- Full GC 频率。
- 老年代使用率。
三、jstat¶
看各区使用率、GC 次数、时间。
四、jmap dump¶
怀疑内存泄漏:
用 MAT 打开,找大对象。
五、Arthas¶
六、常见问题¶
1. Minor GC 频繁¶
- 年轻代太小。
- 大对象直接进老年代。
2. Full GC 频繁¶
- 老年代满。
- 元空间满。
- 大对象多。
3. 单次 GC 时间长¶
- 堆太大。
- 对象太多。
七、流程¶
现象 → jstat → GC 日志 → dump → MAT → 改代码/调参数。
不要慌
先看 GC 日志,大部分问题一目了然。