Skip to content

JVM 优化

本章节介绍 JVM 调优的思路、工具与常用参数配置。

调优目标

  • 减少 Full GC 频率
  • 缩短 GC 停顿时间(STW)
  • 合理分配堆内存
  • 排查内存泄漏

常用 JVM 参数

bash
# 堆内存
-Xms4g -Xmx4g          # 初始堆 = 最大堆(避免动态扩容)
-Xmn2g                  # 新生代大小

# 垃圾回收器
-XX:+UseG1GC            # 推荐使用 G1(JDK9+ 默认)
-XX:MaxGCPauseMillis=200 # 最大停顿目标

# GC 日志
-Xlog:gc*:file=/logs/gc.log:time,uptime:filecount=5,filesize=20m

# OOM 转储
-XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/dumps/

诊断工具

工具用途
jstat -gcutil <pid> 1000实时 GC 统计
jmap -heap <pid>堆内存快照
jstack <pid>线程栈分析(死锁排查)
Arthas在线诊断,不重启排查问题
GCEasy / GCViewerGC 日志可视化分析

G1 调优要点

新生代占比:默认 5%~60%,由 G1 自动调整
Region 大小:-XX:G1HeapRegionSize=4m(1~32MB,2 的幂次)
并发标记线程:-XX:ConcGCThreads=4

常见问题排查

频繁 Full GC

  1. jstat 查看老年代占用趋势
  2. jmap -histo 查看对象分布
  3. 检查是否有大对象直接进入老年代
  4. 排查内存泄漏(结合 MAT 分析 heap dump)

CPU 飙高

  1. top -Hp <pid> 找到占用 CPU 最高的线程
  2. 将线程 ID 转为 16 进制
  3. jstack 中找对应栈信息

基于 VitePress 构建