詹学伟
詹学伟
Published on 2024-06-09 / 24 Visits
0
0

查看GC频率的几种方式

说明:当前文章是基于在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到 https://gceasy.io

关键指标计算

Young GC频率‌

Young GC频率 = YGC / JVM运行时间(小时)

Full GC频率‌

Full GC频率 = FGC / JVM运行时间(小时)

GC间隔‌

平均GC间隔 = 运行时间 / (YGC+FGC)

健康指标参考

GC类型

健康频率

警告阈值

Young GC

< 5次/分钟

> 10次/分钟

Full GC

0次/天(理想情况)

> 1次/小时

特别提醒

如果发现:

  • Full GC频率 > 1次/天 → 需要优化堆大小或对象分配

  • Young GC间隔 < 10秒 → 可能需要增大新生代

  • GC耗时占比 > 5% → 需要调优GC参数

建议结合jmap -histo <pid>查看对象分布,找到高频GC的根源。


Comment