以下是 jstat
命令的详细解析,包括常用参数及其用途:
命令格式
jstat [options] <vmid> [interval] [count]
- vmid:JVM 进程 ID(或通过
jps
获取) - interval:采样间隔时间(单位:毫秒,默认只输出一次)
- count:采样次数(默认无限次,若指定则按间隔输出指定次数)
常用参数(options)
参数 | 作用 | 典型输出字段说明 |
---|---|---|
-class | 类加载/卸载统计 | Loaded (已加载类数), Bytes (占用的KB数), Unloaded (卸载类数), Time (加载耗时,单位:秒) |
-compiler | JIT 编译器编译的方法统计 | Compiled (编译任务数), Failed (失败数), Invalid (无效数), Time (编译耗时) |
-printcompilation | 热点方法编译详情 | Compiled (编译次数), Size (字节码大小), Type (编译类型), Method (方法名) |
-gc | GC 相关堆状态(总容量、已用、回收次数/时间等) | S0C /S1C (Survivor容量), EC (Eden容量), OC (Old容量), YGC (Young GC次数), YGCT (Young GC总时间) |
-gccapacity | 各代内存池的最小/最大容量(新生代、老年代、元空间等) | NGCMN (新生代最小容量), NGCMX (新生代最大容量), OC (当前老年代容量) |
-gcutil | 各内存区域使用率(按百分比显示) | S0U (Survivor 0使用率), E (Eden使用率), O (Old使用率), M (Metaspace使用率), CCS (压缩类空间使用率) |
-gcnew | 新生代(Young Generation)详细状态 | TT (对象年龄阈值), MTT (最大阈值), DSS (期望的Survivor大小) |
-gcold | 老年代(Old Generation)和元空间(Metaspace)状态 | MC (Metaspace容量), MU (Metaspace使用量), CCSC (压缩类空间容量) |
-gcmetacapacity | Metaspace 元数据容量统计(Java 8+) | MCMN (最小容量), MCMX (最大容量), MC (当前容量) |
重点参数示例(以 -gc
输出为例)
输出字段详解:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT
512.0 512.0 0.0 438.0 4096.0 512.0 2048.0 1452.0 1536.0 1512.0 256.0 248.0 28 0.139 0 0.000 6 0.009 0.148
字段 | 含义 | 单位 |
---|---|---|
S0C | Survivor 0 区当前容量 (Capacity) | KB |
S1C | Survivor 1 区当前容量 | KB |
S0U | Survivor 0 区已使用量 (Used) | KB |
S1U | Survivor 1 区已使用量 | KB |
EC | Eden 区当前容量 | KB |
EU | Eden 区已使用量 | KB |
OC | Old 区当前容量 | KB |
OU | Old 区已使用量 | KB |
YGC | Young GC 触发次数 | 次 |
YGCT | Young GC 累计耗时 | 秒 |
FGC | Full GC 触发次数 | 次 |
FGCT | Full GC 累计耗时 | 秒 |
GCT | 所有 GC 总耗时 | 秒 |
常用场景示例
-
查看 GC 状态(每1秒采样一次,共5次)
jstat -gc <pid> 1000 5
-
监控内存使用率(百分比形式)
jstat -gcutil <pid> 2000
-
检查类加载情况
jstat -class <pid>
-
分析新生代内存分配
jstat -gcnew <pid>
-
追踪 Metaspace 容量变化
jstat -gcmetacapacity <pid> 3000 3
关键诊断技巧
- Young GC 频繁:若
YGC
增长快且EU
(Eden使用量)在 GC 后未显著下降,可能存在短生命周期对象过多或 Eden 区过小。 - Full GC 触发:若
FGC
次数持续增加且OU
(Old使用率)未降低,可能老年代存在内存泄漏。 - Metaspace 溢出风险:当
M
(Metaspace利用率)接近 100% 且持续不降,需检查动态类生成(如反射、ASM)或调整-XX:MaxMetaspaceSize
。
通过 jstat
可以快速定位内存瓶颈或 GC 效率问题,结合 jmap
和 jstack
等工具进一步分析。