jstat 是 jdk 自带的轻量级命令行工具,用于实时监控 jvm 运行时状态,尤其适合查看 gc 行为;通过 jstat -gc -t -h10 1000 持续采样,结合 ygc/fgc 次数变化量与时间间隔可计算 gc 频率。

jstat 是 JDK 自带的轻量级命令行工具,用于实时监控 JVM 运行时状态,尤其适合查看 GC 行为。要监控 GC 回收频率(即单位时间内发生了多少次 GC),关键不是只看一次快照,而是持续采样、观察变化趋势。
明确你要看的指标:YGC / YGCT / FGC / FGCT
执行 jstat -gc <pid></pid> 后输出的关键列含义:
- YGC:Young GC 发生次数(年轻代回收次数)
- YGCT:Young GC 总耗时(单位:秒)
- FGC:Full GC 发生次数(老年代/整堆回收次数)
- FGCT:Full GC 总耗时(单位:秒)
回收频率 = 次数变化量 ÷ 时间间隔。所以你需要定期获取这些数值并计算差值。
用 -t 和 -h 配合实现“带时间戳的周期性监控”
推荐命令:
jstat -gc -t -h10
-
-t:在每行开头添加自 JVM 启动以来的秒级时间戳(便于对齐和计算间隔) -
-h10:每 10 行输出一次表头,避免滚动过快丢失列名 -
1000:每 1000 毫秒(1 秒)采集一次
这样你就能直观看到 YGC 和 FGC 列随时间递增的速度——增长越快,说明 GC 越频繁。
Java开发手册规约集合,基于阿里巴巴Java开发手册(嵩山版)。 涵盖7大维度:编程规约、异常日志、单元测试、安全规约、MySQL数据库、工程结构、设计规约。 当用户需要:(1) 编写或审查Java代码 (2) 检查命名/代码规范 (3) 处理异常和日志 (4) 编写单元测试 (5) 安全编码 (6) 数据库设...
手动计算频率:例如每分钟 Young GC 次数
假设你截取两行数据:
Time(s) YGC YGCT FGC FGCT
120.0 48 0.821 2 0.315
180.0 72 1.210 2 0.315
- 时间差:60 秒
- YGC 差值:72 − 48 = 24 次
- → 平均 Young GC 频率 ≈ 24 次 / 60 秒 = 0.4 次/秒,即 24 次/分钟
- FGC 未增加,说明这段时间没发生 Full GC
进阶技巧:用脚本自动算频率(Linux/macOS)
如果需要长期盯屏或告警,可用 shell 脚本自动提取并计算差值。例如每 5 秒统计一次 YGC 增量:
jstat -gc
再配合前后两次结果相减即可。生产环境建议搭配 awk + date 或简单 Python 脚本做滚动速率分析,避免人工误判。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










