jstat是JDK自带的轻量级JVM统计监控工具,通过PID实时查看堆内存分布、GC频次与耗时、类加载及JIT编译等指标;需先用jps获取PID,再用如jstat -gc 2000 10等命令周期性监控。

jstat 是 JDK 自带的轻量级 JVM 统计监控工具,无需启动额外代理或修改应用,直接通过进程 ID(PID)即可实时查看堆内存分布、GC 频次与耗时、类加载及 JIT 编译等关键运行时指标。
获取目标 Java 进程 PID
使用 jps 命令快速列出本地所有 Java 进程:
jps -l —— 显示主类全限定名或 jar 路径
jps -lv —— 同时显示 JVM 启动参数,便于确认是否启用了 GC 日志等配置
若进程运行在远程服务器,需先 SSH 登录后再执行 jps;容器环境中需进入对应容器内操作(如 docker exec -it
查看堆内存各区域使用情况
用 -gc 选项输出当前堆内存详细占用(单位:KB):
jstat -gc
重点关注字段含义:
- S0C / S1C:Survivor 0/1 区容量(Current)
- EC / OC / MC / CCSC:Eden、老年代、元空间、压缩类空间容量
- EU / OU / MU / CCU:对应区域已使用量(Used)
- YGC / YGCT:Young GC 次数与总耗时(秒)
- FGC / FGCT:Full GC 次数与总耗时(秒)
若 OU 接近 OC 或 MU 持续增长逼近 MC,提示老年代或元空间存在压力,可能触发频繁 GC 或 OOM。
在调试 Java 后端 API 故障时使用此技能,尤其适用于以下任务:分析日志、跨 Controller、Service 和 Mapper 层追踪请求、定位异常根因、检查 SQL 执行或参数流转,以及生成简洁的诊断结论与修复方案。
持续监控 GC 行为变化趋势
添加时间间隔(毫秒)和采样次数,实现周期性观测:
jstat -gc
观察重点:
- YGC 频率是否稳定(如每分钟几十次属高频,需检查对象创建速率)
- 每次 YGCT 是否明显上升(可能 Survivor 区过小或对象晋升过快)
- FGC 是否出现(除 CMS/G1 并发失败外,应尽量避免 Full GC)
若发现 FGC 突增,可配合 jstat -gccause
结合其他选项定位常见问题
按需选用更细分视角:
-
jstat -class
:查看类加载数量与字节码大小,辅助判断是否存在动态生成类泄漏(如 CGLIB、反射代理过多) -
jstat -compiler
:观察 JIT 编译方法数及耗时,编译停滞可能影响性能 -
jstat -gcnew
:专注新生代 GC 细节(如 Eden 使用率、Survivor 复制效率) -
jstat -gcold
:只显示老年代与永久代/元空间统计
注意:不同 JDK 版本字段略有差异(如 JDK 8 元空间为 MC/MU,JDK 17+ 可能显示 CCSC/CCU),建议先执行 jstat -options 查看当前支持的选项。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










