JStat 是 JDK 自带的轻量级命令行工具,用于监控 JVM 运行时统计信息,尤其适合查看 GC 行为;它无需配置、不侵入应用、实时性好,是排查 GC 频繁、停顿过长或内存泄漏的第一步。

JStat 是 JDK 自带的轻量级命令行工具,专门用于监控 JVM 的运行时统计信息,尤其适合查看垃圾回收(GC)行为。它无需额外配置、不侵入应用、实时性好,是排查 GC 频繁、停顿过长或内存泄漏问题的第一步。
确认目标 Java 进程 PID
使用 jps -l 列出当前所有 Java 进程及其主类或 JAR 路径,快速定位目标进程 ID(PID)。若 jps 不可用,也可用 ps aux | grep java 辅助查找。注意区分开发环境多个 Java 进程,避免监控错实例。
常用 GC 监控选项与含义
核心命令格式为:jstat -gc <pid> [<interval> [<count>]]。关键参数说明:
- -gc:输出堆各区域容量、已用空间、GC 次数与耗时(含 Young GC 和 Full GC)
- -gccause:同 -gc,但额外显示最后一次 GC 原因(如 Allocation Failure、System.gc() 等)
- -gcutil:以百分比形式展示各代使用率(更直观判断内存压力)
- interval:单位毫秒,例如 1000 表示每秒刷新一次
- count:指定输出行数,比如 jstat -gc 12345 2000 5 表示每 2 秒打印一次,共 5 行
解读关键字段(以 -gc 输出为例)
典型输出包含多列,重点关注:
- S0C/S1C:Survivor0/1 区容量(KB),大小应相近且稳定
- EC:Eden 区容量;EU:Eden 已用空间——持续高位可能预示 Young GC 频繁
- OC/OU:Old 区容量与已用空间——OU 持续增长且不下降,提示对象晋升过多或存在内存泄漏
- YGC/YGCT:Young GC 次数与总耗时(秒)——次数突增或 YGCT 单次超 50ms 需关注
- FGC/FGCT:Full GC 次数与总耗时——非必要情况下应接近 0;一旦出现,需立即检查原因
实战建议与注意事项
直接运行 jstat -gcutil <pid> 1000 可快速获得每秒更新的百分比视图,适合日常巡检。若发现 Old 区使用率缓慢上升且 Full GC 后不回落,可配合 jmap -histo <pid> 查看大对象分布。注意 jstat 本身开销极小,但高频采样(如 100ms 间隔)在高负载生产环境仍需谨慎。另外,Java 8 与 Java 11+ 的输出字段略有差异(如 Metaspace 替代 PermGen),需结合 JDK 版本查阅文档。


















