JVM 性能调优指南:堆内存、GC 日志分析

全面介绍 JVM 性能调优的方法,包括堆内存配置、GC 日志分析、常见问题排查。

Java 后端 2026-06-18 12 分钟

JVM 性能调优指南:堆内存、GC 日志分析

JVM 调优是 Java 应用性能优化的重要环节。

堆内存结构

堆内存
├── 新生代 (Young Generation)
│   ├── Eden (80%)
│   ├── Survivor0 (10%)
│   └── Survivor1 (10%)
├── 老年代 (Old Generation)
└── 元空间 (Metaspace)

堆内存配置

# 堆大小
-Xms4g -Xmx4g

# 新生代大小
-Xmn2g

# 新生代比例
-XX:NewRatio=2

# Survivor 比例
-XX:SurvivorRatio=8

# 元空间
-XX:MetaspaceSize=256m
-XX:MaxMetaspaceSize=256m

GC 日志分析

开启 GC 日志

# Java 9+
-Xlog:gc*:file=gc.log:time,uptime,level,tags

# Java 8
-XX:+PrintGCDetails
-XX:+PrintGCDateStamps
-Xloggc:gc.log

日志分析工具

  • GCEasy:在线分析
  • GCViewer:本地分析
  • JVisualVM:实时监控

关键指标

指标 说明 目标
GC 频率 GC 次数/分钟 < 10
GC 停顿 每次 GC 停顿时间 < 200ms
Full GC 频率 Full GC 次数/小时 < 1

常见问题

1. 频繁 Full GC

原因: 老年代空间不足

解决:

# 增加堆内存
-Xms8g -Xmx8g

# 增加老年代比例
-XX:NewRatio=3

2. GC 停顿时间长

原因: 对象太多,收集器不合适

解决:

# 使用 G1
-XX:+UseG1GC
-XX:MaxGCPauseMillis=200

# 使用 ZGC
-XX:+UseZGC

3. 内存泄漏

排查:

# 导出堆内存
jmap -dump:format=b,file=heap.hprof <pid>

# 使用 MAT 分析

调优步骤

  1. 监控:收集 GC 日志、性能指标
  2. 分析:找出瓶颈
  3. 优化:调整参数或代码
  4. 验证:测试优化效果

最佳实践

  1. 设置 -Xms = -Xmx:避免动态扩缩容
  2. 选择合适的收集器:根据场景选择
  3. 定期分析 GC 日志:发现潜在问题
  4. 避免内存泄漏:检查资源释放

总结

JVM 调优需要结合具体场景。通过监控、分析、优化,可以提升应用性能。

📚 相关文章