跳转至

JVM 如何调优与线上分析

一、调优目标

  • 降低 Full GC 频率。
  • 减少 STW 时间。
  • 避免 OOM。
  • 提高吞吐量。

二、常用参数

-Xms4g                    # 初始堆
-Xmx4g                    # 最大堆(和 Xms 相等避免动态扩缩)
-Xmn2g                    # 年轻代
-XX:MetaspaceSize=256m
-XX:+UseG1GC              # G1
-XX:MaxGCPauseMillis=200  # 目标停顿

三、线上分析工具

1. jps

看 Java 进程。

2. jstat

jstat -gcutil <pid> 1s

看 GC 次数、时间、各区使用率。

3. jmap

jmap -dump:format=b,file=heap.hprof <pid>

导出堆 dump。

4. jstack

看线程栈,找死锁、CPU 高。

5. Arthas

阿里巴巴开源,在线诊断。

四、分析流程

  1. CPU 高:top -Hp → jstack 看线程栈。
  2. 内存高/OOM:jmap dump → MAT 分析。
  3. GC 频繁:jstat 看 GC 频率 → 调堆大小。
  4. 死锁:jstack 找 deadlock。

五、调优步骤

  1. 压测,看 GC 日志。
  2. 选合适收集器(G1/ZGC)。
  3. 调堆大小、分代比例。
  4. 监控 GC 停顿时间。
  5. 持续优化。

六、常见误区

  • 堆越大越好(Full GC 停顿长)。
  • 不看 GC 日志瞎调。

工具

线上优先 Arthas,不中断服务。MAT 分析 dump。