-Xlog:gc*:file=/var/log/gc-%p-%t.log:time,uptime,level,tags:filecount=10,filesize=100m
-XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintTenuringDistribution # JDK 8 兼容写法
-verbose:gc
关键指标解读:
| 工具 | 定位 | 核心优势 | 适用场景 |
|---|---|---|---|
| jconsole | JDK 自带 GUI | 零配置、支持 JMX 远程、MBean 操作 | 快速查看堆/线程/类加载趋势 |
| VisualVM | JDK 6u7+ 集成 | CPU/内存采样、堆 Dump 分析、线程死锁检测、插件生态 | 开发/测试环境深度诊断 |
| Arthas | 阿里开源 Java 诊断神器 | 无侵入、支持生产环境、命令行交互、支持 watch/trace/heapdump | 线上故障秒级定位 |
| Async Profiler | 低开销采样 Profiler | CPU/分配/锁/Wall-clock 采样、火焰图、无 Safepoint 偏差 | 性能热点分析、内存分配压力源 |
# 方式一:jmap(会触发 STW,慎用于大堆生产)
jmap -dump:live,format=b,file=/tmp/heap.hprof
# 方式二:JVM 参数自动触发(推荐)
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/dumps/
# 方式三:Arthas 非侵入式(推荐生产)
arthas@pid> heapdump /tmp/heap.hprof --live
.hprof → Leak Suspects Report 自动定位潜在泄漏byte[]、char[]、HashMap$Node[])$ jstat -gcutil 1000 10
S0 S1 E O P YGC YGCT FGC FGCT GCT
54.62 0.00 42.87 43.52 86.24 1792 5.093 33 7.670 12.763
System.gc()、CMS/G1 并发失败触发,全堆扫描,STW 时间长FGCT 单次 > 1s 或 FGC 频繁(如分钟级)即为异常,需扩容老年代、调大新生代、优化对象晋升率GCT 趋势、FGC 触发原因jmap -dump/VisualVM,消耗 CPU/内存可能压垮业务。用 Arthas heapdump + 本地 MAT 分析