一、前言
JVM 性能优化步骤:
- 预估系统参数
- 压测后,调整 JVM 参数
- 线上系统监控和优化
- 统一的 JVM 参数模板 线上频繁 Full GC 的表现:
- 机器 CPU 负载过高
- 频繁 Full GC 报警
- 系统无法处理请求或者处理过慢
频繁 Full GC 常见原因:
- 对象频繁进入老年代,频繁触发 Full GC系统承载高并发请求,或处理数据量过大,导致 Young GC 频繁,每次 Young GC 过后存活对象太多,内存分配不合理,Survivor 区域过小。
- 系统一次性加载过多数据进入内存,大对象直接入老年代,频繁触发 Full GC
- 内存泄漏,对象无法回收,一直占用在老年代里,频繁触发 Full GC
- MetaSpace (元空间)加载类过多,触发 Full GC
- 代码中使用 System.gc(),触发 Full GC
针对以上 Full GC 常见的原因,对应的优化方式:
- jstat 分析,合理分配内存,调大 Survivor 区域
- dump 出内存快照,用 MAT 工具进行分析,代码上排查
- 若内存使用不多,还频繁触发 Full GC,那么优化加载的类
- 若内存使用不多,还频繁触发 Full GC