jstat - monitor JVM statistics

jstat是一个强大的命令行工具,用于监视Java虚拟机的各种统计信息,包括类加载、即时编译器、垃圾收集等。通过不同参数如-gc、-gccapacity等,可以详细了解到JVM内存各个区域的容量、使用情况和垃圾收集状态。利用jstat,开发者可以有效地诊断和优化JVM的性能。

jstat使用

官网地址jstat

# pid必选 interval次数 times打印时间间隔
jstat -gcutil <pid> [interval] [times]
重点关注是FullGC的次数和总时间。FGC是FullGC的次数,FGCT是FullGC的总耗时(s)。
另外,简单解释下其它列的含义
S0/S1 表示两个survival区的利用率(%)
E 表示Eden区的利用率(%)
以上三个区域合在一起就是新生代了。

O 表示老年代的利用率(%)
M 表示Metaspace的利用率(%)
CSS 表示 Compressed class space 的利用率(%)
YGC 表示 YounGC的总次数
YGCT 表示 YoungGC的总耗时(秒)

参数选项

jstat -options

-class 用于查看类加载情况的统计
-compiler 用于查看HotSpot中即时编译器编译情况的统计
-gc 用于查看JVM中堆的垃圾收集情况的统计
-gccapacity 用于查看新生代、老生代及持久代的存储容量情况
-gcmetacapacity 显示metaspace的大小
-gcnew 用于查看新生代垃圾收集的情况
-gcnewcapacity 用于查看新生代存储容量的情况
-gcold 用于查看老生代及持久代垃圾收集的情况
-gcoldcapacity 用于查看老生代的容量
-gcutil 显示垃圾收集信息
-gccause 显示垃圾回收的相关信息(同-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因
-printcompilation 输出JIT编译的方法信息

-class 类加载统计

Loaded:加载类的数量
Bytes:加载类的size,单位为Byte
Unloaded:卸载类的数目
Bytes:卸载类的size,单位为Byte
Time:加载与卸载类花费的时间

-compiler 即时编译器编译情况的统计

-gc 用于查看JVM中堆的垃圾收集情况的统计

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:当前压缩类空间的容量 (字节)
CCSU:当前压缩类空间目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

-gccapacity 用于查看新生代、老生代及持久代的存储容量情况

NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC:old代当前新生成的容量 (字节)
OC:Old代的容量 (字节)
MCMN:metaspace(元空间)中初始化(最小)的大小 (字节)
MCMX:metaspace(元空间)的最大容量 (字节)
MC:metaspace(元空间)当前新生成的容量 (字节)
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcmetacapacity 显示metaspace的大小

MCMN:最小元数据容量
MCMX:最大元数据容量
MC:当前元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:当前压缩类空间大小
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

-gcnew 用于查看新生代垃圾收集的情况

S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT:持有次数限制
MTT:最大持有次数限制
DSS:期望的幸存区大小
EC:年轻代中Eden(伊甸园)的容量 (字节)
EU:年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
YGCT:从应用程序启动到采样时年轻代中gc所用时间(s)

-gcnewcapacity 用于查看新生代存储容量的情况

NGCMN:年轻代(young)中初始化(最小)的大小(字节)
NGCMX:年轻代(young)的最大容量 (字节)
NGC:年轻代(young)中当前的容量 (字节)
S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C:年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX:年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C:年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX:年轻代中Eden(伊甸园)的最大容量 (字节)
EC:年轻代中Eden(伊甸园)的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数

-gcold 用于查看老生代及持久代垃圾收集的情况

MC:metaspace(元空间)的容量 (字节)
MU:metaspace(元空间)目前已使用空间 (字节)
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
OC:Old代的容量 (字节)
OU:Old代目前已使用空间 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

-gcoldcapacity 用于查看老生代的容量

OGCMN:old代中初始化(最小)的大小 (字节)
OGCMX:old代的最大容量(字节)
OGC:old代当前新生成的容量 (字节)
OC:Old代的容量 (字节)
YGC:从应用程序启动到采样时年轻代中gc次数
FGC:从应用程序启动到采样时old代(全gc)gc次数
FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT:从应用程序启动到采样时gc用的总时间(s)

-gcutil 显示垃圾收集信息

-gccause 显示垃圾回收的相关信息(同-gcutil),同时显示最后一次仅当前正在发生的垃圾收集的原因

-printcompilation 输出JIT编译的方法信息

<think>我们正在讨论jstat命令的两个常用选项:-gc和-gcutil。用户希望了解这两个命令输出参数的具体含义。根据引用[1]和引用[4],我们可以找到一些基础信息:-jstat-gc:监控GC的相关统计信息(如各代内存使用情况)。-jstat-gcutil:监控GC使用情况百分比(如Eden、Old、Meta的使用率)。但是,用户需要的是这两个命令输出的每个参数的具体含义。首先,我们需要明确两个命令的输出列分别代表什么。一、jstat-gc的输出列(根据引用[3]和引用[4]以及标准文档):它输出的是各个内存域的实际容量(单位KB),以及GC发生的次数和时间。通常,jstat-gc的输出包含以下列(注意:不同的JVM版本可能略有不同,但核心列是相似的):S0C:当前Survivor0容量(kB)S1C:当前Survivor1容量(kB)S0U:Survivor0已使用(kB)S1U:Survivor1已使用(kB)EC:当前Eden容量(kB)EU:Eden已使用(kB)OC:当前Old容量(kB)OU:Old已使用(kB)MC:Metaspace(元空间)容量(kB)MU:Metaspace已使用(kB)CCSC:压缩类空间容量(kB)CCSU:压缩类空间已使用(kB)YGC:年轻代GC次数YGCT:年轻代GC总耗时(秒)FGC:FullGC次数FGCT:FullGC总耗时(秒)CGC:并发GC次数(有些版本可能没有)CGCT:并发GC总耗时(秒)GCT:所有GC总耗时(YGCT+FGCT+CGCT)二、jstat-gcutil的输出列:它输出的是各个内存域的使用率百分比。通常包含以下列:S0:Survivor0使用率(百分比)S1:Survivor1使用率(百分比)E:Eden使用率(百分比)O:Old使用率(百分比)M:Metaspace使用率(百分比)CCS:压缩类空间使用率(百分比)YGC:年轻代GC次数YGCT:年轻代GC总耗时(秒)FGC:FullGC次数FGCT:FullGC总耗时(秒)CGC:并发GC次数(有些版本可能没有)CGCT:并发GC总耗时(秒)GCT:所有GC总耗时(秒)注意:在gcutil中,每个内存域的使用率计算公式为:(已使用容量/当前容量)*100%另外,引用[2]提到,在故障分析中,gcutil是一个常用的工具,可以快速查看各个域的使用率,从而判断内存使用是否健康。下面我们用一个具体的例子来说明(假设输出一行,数字为示例):jstat-gcutil1234510001输出:S0S1EOMCCSYGCYGCTFGCFGCTCGCCGCTGCT0.0025.0080.0065.0097.5090.001002.50050.80030.2003.500解释:S0:0.00%表示Survivor0没有使用S1:25.00%表示Survivor1使用了25%E:80.00%表示Eden使用了80%O:65.00%表示老年代使用了65%M:97.50%表示元空间使用了97.5%,需要关注是否可能溢出CCS:90.00%表示压缩类空间使用了90%YGC:100次年轻代GCYGCT:年轻代GC总耗时2.5秒FGC:5次FullGCFGCT:FullGC总耗时0.8秒CGC:3次并发GC(如CMS的并发阶段)CGCT:并发GC总耗时0.2秒GCT:总GC时间3.5秒而同样的进程,用jstat-gc可能输出(单位为KB):S0CS1CS0US1UECEUOCOUMCMUCCSCCCSUYGCYGCTFGCFGCTCGCCGCTGCT1024.01024.00.0256.08192.06553.610240.06656.04480.04368.0384.0345.61002.50050.80030.2003.500这里每个容量和使用量都是具体的数值(KB)。因此,总结:-jstat-gc提供的是绝对值(容量和使用量),单位是KB。-jstat-gcutil提供的是相对值(使用百分比)。在实际问题排查中,gcutil可以快速看出哪些域使用率过高,而gc则可以具体看出内存分配的大小和实际使用量,两者结合可以更全面地分析内存使用情况。注意:不同的垃圾收集器(如G1)和不同的JDK版本,输出可能会有所不同。例如,在G1收集器中,可能没有S0C、S1C等,而是替换为G1相关的域。以上内容参考了引用[1]、[2]、[3]、[4]。</think>### jstat -gc 和 jstat -gcutil 参数详解 #### 一、`jstat -gc` 输出参数(显示各内存域实际容量) 输出单位为 KB,提供内存域的**绝对数值**: ``` S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT CGC CGCT GCT ``` - **新生代相关** - `S0C`:Survivor0 当前容量 - `S1C`:Survivor1 当前容量 - `S0U`:Survivor0 已使用量 - `S1U`:Survivor1 已使用量 - `EC`:Eden 当前容量 - `EU`:Eden 已使用量 - **老年代相关** - `OC`:Old 当前容量 - `OU`:Old 已使用量 - **元空间相关** - `MC`:Metaspace 容量 - `MU`:Metaspace 已使用量 - `CCSC`:压缩类空间容量 - `CCSU`:压缩类空间已使用量 - **GC 统计** - `YGC`:Young GC 发生次数 - `YGCT`:Young GC 总耗时(秒) - `FGC`:Full GC 发生次数 - `FGCT`:Full GC 总耗时(秒) - `CGC`:并发 GC 次数(如 CMS/G1) - `CGCT`:并发 GC 总耗时(秒) - `GCT`:所有 GC 总耗时(YGCT + FGCT + CGCT)[^1][^3] #### 二、`jstat -gcutil` 输出参数(显示使用百分比) 输出为**百分比**,聚焦内存使用率: ``` S0 S1 E O M CCS YGC YGCT FGC FGCT CGC CGCT GCT ``` - **内存使用率** - `S0`:Survivor0 使用率 - `S1`:Survivor1 使用率 - `E`:Eden 使用率 - `O`:Old 使用率 - `M`:Metaspace 使用率 - `CCS`:压缩类空间使用率 - **GC 统计**(与 `-gc` 相同) - `YGC`/`YGCT`:Young GC 次数与耗时 - `FGC`/`FGCT`:Full GC 次数与耗时 - `GCT`:GC 总耗时[^2][^4] #### 三、核心别 | **特性** | `jstat -gc` | `jstat -gcutil` | |----------------|----------------------------|-------------------------| | **数据维度** | 绝对容量(KB) | 使用率百分比(%) | | **适用场景** | 分析内存分配大小 | 快速识别内存瓶颈域 | | **关键指标** | `EU`(Eden 使用量) | `O`(Old 使用率) | | **故障排查** | 结合容量判断是否需扩容 | 识别 >95% 的溢出风险 | #### 四、使用示例 1. **监控内存趋势** ```bash jstat -gcutil <pid> 1000 5 # 每秒采样1次,共5次 ``` 输出示例: ``` S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 0.00 25.00 80.00 65.00 97.50 90.00 100 2.500 5 0.800 3.500 ``` **解读**: - 元空间(`M=97.5%`)接近溢出,需检查类加载 - 老年代(`O=65%`)使用正常 - 发生 5 次 Full GC(`FGC=5`)[^2][^4] 2. **分析内存分配** ```bash jstat -gc <pid> ``` 输出示例: ``` EC EU OC OU MC 8192.0 6553.6 10240.0 6656.0 4480.0 ``` **解读**: - Eden 总容量 8MB(`EC=8192KB`),已用 6.4MB(`EU=6553.6KB`) - Old 总容量 10MB(`OC=10240KB`)[^3][^5] ### 关键应用场景 - **`-gcutil`**:快速定位内存瓶颈(如 Old 持续 >90% 可能需优化对象生命周期)[^2] - **`-gc`**:调整 JVM 参数前验证各代容量(如 `OC` 是否过小导致频繁 Full GC)[^5]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

心有城府,腹有良谋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值