JVM 如何调优与线上分析¶
一、调优目标¶
- 降低 Full GC 频率。
- 减少 STW 时间。
- 避免 OOM。
- 提高吞吐量。
二、常用参数¶
-Xms4g # 初始堆
-Xmx4g # 最大堆(和 Xms 相等避免动态扩缩)
-Xmn2g # 年轻代
-XX:MetaspaceSize=256m
-XX:+UseG1GC # G1
-XX:MaxGCPauseMillis=200 # 目标停顿
三、线上分析工具¶
1. jps¶
看 Java 进程。
2. jstat¶
看 GC 次数、时间、各区使用率。
3. jmap¶
导出堆 dump。
4. jstack¶
看线程栈,找死锁、CPU 高。
5. Arthas¶
阿里巴巴开源,在线诊断。
四、分析流程¶
- CPU 高:top -Hp → jstack 看线程栈。
- 内存高/OOM:jmap dump → MAT 分析。
- GC 频繁:jstat 看 GC 频率 → 调堆大小。
- 死锁:jstack 找 deadlock。
五、调优步骤¶
- 压测,看 GC 日志。
- 选合适收集器(G1/ZGC)。
- 调堆大小、分代比例。
- 监控 GC 停顿时间。
- 持续优化。
六、常见误区¶
- 堆越大越好(Full GC 停顿长)。
- 不看 GC 日志瞎调。
工具
线上优先 Arthas,不中断服务。MAT 分析 dump。