jstat 是轻量级 JVM 堆内存与 GC 监控工具,核心在于选对选项(如 -gcutil、-gc、-gccause)、持续采样、解读关键字段;无需修改应用或依赖 JMX,适合线上快速摸底。

用 jstat 观察堆内存与 GC 频率,核心是选对选项、持续采样、看懂关键字段。它不改应用、不依赖 JMX,开箱即用,适合线上快速摸底。
先拿到 Java 进程 PID
没有 PID 就没法监控,最直接的方式是:
- 运行
jps -l,列出所有 Java 进程及其主类或 jar 路径,一眼找到目标(比如 Spring Boot 应用会显示完整 jar 路径) - 如果
jps不在环境变量里,可用$JAVA_HOME/bin/jps -l - 权限受限时,
ps aux | grep java辅助确认,注意区分启动参数
用 -gcutil 看内存使用率(最直观)
百分比形式更易判断“哪块快满了”,适合快速扫描健康状态:
详细的 Three.js 3D 图形参考,涵盖场景设置、相机、几何体、材质、光照、动画、控制器、加载器、数学工具和调试。
-
jstat -gcutil <pid>:一次性输出各区域使用率(E=Eden, O=老年代, M=Metaspace)和 GC 次数 -
jstat -gcutil <pid> 1000 5:每秒刷新一次,共 5 次,观察趋势(比如 Eden 使用率是否反复冲到 95%+) - E 长期 >90% → 新生代 GC 可能频繁;O 接近 100% → 老年代压力大,留意 FGC 是否同步上升
用 -gc 看 GC 频次与耗时(定位瓶颈)
单位是 KB 和秒,适合分析 GC 效率与堆分配行为:
立即学习“Java免费学习笔记(深入)”;
-
jstat -gc <pid> 2000:每 2 秒打印一次,持续观察。重点盯住这些列:
• YGC / FGC:年轻代/Full GC 次数 —— 1 分钟内 FGC ≥ 3 次需警惕
• YGCT / FGCT:对应总耗时 —— 单次 FGCT > 1 秒,说明老年代回收卡顿
• EU / OU / MU:Eden、老年代、元空间已用量 —— OU 持续爬升且不回落,大概率内存泄漏 - 加
-gccause <pid> 2000可附带每次 GC 的触发原因(如 Allocation Failure 或 Metadata GC Threshold),帮助缩小根因范围
配合其他选项辅助判断
单一维度容易误判,几个小技巧提升诊断效率:
- 怀疑类加载异常?跑
jstat -class <pid> 2000,看loaded是否持续上涨而unloaded几乎为 0 —— 可能是 ClassLoader 泄漏 - 想确认堆是否动态扩容?用
jstat -gccapacity <pid>,对比OC(老年代容量)是否随时间变化 - 输出太密看不清?加
-h3(比如jstat -gc <pid> 1000 -h3),每 3 行重打一次表头


















