jstat是jdk自带的轻量级命令行工具,用于实时监控jvm内存分配与gc行为;通过jps获取pid后,可用-gc、-gcutil等选项查看各代内存使用量、百分比及gc次数/耗时,结合eu、ou、ygc、fgc等字段快速定位内存泄漏或gc瓶颈。

jstat 是 JDK 自带的轻量级命令行工具,直接用它就能实时看 JVM 的内存分配和 GC 行为,不需要额外安装或配置。关键在于选对选项、拿到正确 PID、理解输出字段含义。
先查 Java 进程 PID
运行 jps -l 列出所有 Java 进程及其主类名,找到目标应用的 PID(比如 12345):
- jps -l 显示完整类路径,适合 Spring Boot 等封装应用
- 如果 jps 不在 PATH 中,可直接用 $JAVA_HOME/bin/jps -l
- 生产环境若权限受限,可用 ps aux | grep java 辅助确认
常用监控命令与场景
根据关注点选择对应选项,最常用的是 -gc 和 -gcutil:
DMap GL地图JSAPI(dmapgl)开发指南。用于编写、审查、调试 DMap 地图 API 代码,涵盖地图初始化、覆盖物渲染、图层管理、事件处理、控件交互等任务。当用户提及 dmap、dmapgl、jsapi‑gl 或相关地图开发需求时自动触发。
- jstat -gc 12345:一次性输出详细堆内存结构(Eden、S0/S1、Old、Metaspace)及 GC 次数/耗时,单位 KB
- jstat -gcutil 12345 1000 5:每秒刷新一次,共 5 次,显示各区域使用率百分比(如 EU=98.2 表示 Eden 已用 98.2%)
- jstat -gccause 12345 2000:每 2 秒输出一次,并附带最近一次 GC 的触发原因(如 Allocation Failure、System.gc())
- jstat -class 12345:检查类加载是否异常增长,辅助判断 ClassLoader 泄漏
重点看哪些字段
以 -gc 输出为例,核心字段有:
- EU / OU / MU:Eden、老年代、Metaspace 的已使用量——持续上升且不回落,提示内存泄漏或容量不足
- YGC / FGC:Young GC 和 Full GC 次数——FGC 频繁(如 1 分钟内 ≥3 次)需警惕老年代压力
- YGCT / FGCT:对应 GC 总耗时——单次 YGCT > 100ms 或 FGCT > 1s,说明 GC 效率低,可能需调优 GC 参数
- OC / MC:老年代和 Metaspace 容量——若 OU 接近 OC 或 MU 接近 MC,应考虑增大对应区域大小
快速诊断小技巧
不用死记硬背,结合现象反推问题:
- 应用响应变慢 + YGC 频繁 → Eden 太小或对象生命周期过长,考虑调大 -Xmn
- 频繁 Full GC + OU 缓慢爬升 → 老年代内存泄漏,用 jmap 做堆转储进一步分析
- FGC 突增 + MU 接近 MC → Metaspace 不足,加 -XX:MaxMetaspaceSize 参数
- GC 时间占比高(GCT / 运行总时间 > 10%)→ GC 成为瓶颈,需评估是否换 GC 算法(如 G1、ZGC)










