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 / GCViewer | GC 日志可视化分析 |
G1 调优要点
新生代占比:默认 5%~60%,由 G1 自动调整
Region 大小:-XX:G1HeapRegionSize=4m(1~32MB,2 的幂次)
并发标记线程:-XX:ConcGCThreads=4常见问题排查
频繁 Full GC
jstat查看老年代占用趋势jmap -histo查看对象分布- 检查是否有大对象直接进入老年代
- 排查内存泄漏(结合 MAT 分析 heap dump)
CPU 飙高
top -Hp <pid>找到占用 CPU 最高的线程- 将线程 ID 转为 16 进制
jstack中找对应栈信息
