说明:当前文章是基于在JDK8环境下
方法1:通过GC日志分析
JVM参数已包含GC日志配置:
-XX:+PrintGCDetails -Xloggc:/app/gcmp/java/script/logs/coi/gc.log
查看日志文件:
tail -f /app/gcmp/java/script/logs/coi/gc.log
日志示例解读:
2024-07-10T15:23:45.731+0800: 1.234: [GC (Allocation Failure) [PSYoungGen: 524800K->43520K(611840K)] 724800K->243520K(2010112K), 0.0457230 secs]
[GC 表示Young GC(Minor GC)
[Full GC 表示Full GC
时间戳可以计算GC频率
方法2:使用jstat实时监控
jstat -gc <pid> 1000 10
输出列说明:
YGC:Young GC次数
YGCT:Young GC总时间
FGC:Full GC次数
FGCT:Full GC总时间
示例(每1秒刷新,共10次):
方法3:使用可视化工具
GCViewer:
java -jar gcviewer.jar gc.log
可直观看到GC事件时间分布
GCEasy(在线分析):
上传gc.log到
关键指标计算
Young GC频率:
Young GC频率 = YGC / JVM运行时间(小时)
Full GC频率:
Full GC频率 = FGC / JVM运行时间(小时)
GC间隔
平均GC间隔 = 运行时间 / (YGC+FGC)
健康指标参考
特别提醒
如果发现:
Full GC频率 > 1次/天 → 需要优化堆大小或对象分配
Young GC间隔 < 10秒 → 可能需要增大新生代
GC耗时占比 > 5% → 需要调优GC参数
建议结合jmap -histo <pid>查看对象分布,找到高频GC的根源。