JVM调优小工具之jstat
jstat是什么?
jstat(JVM statistics Monitoring Tool)是JDK自带的用于查看虚拟机各种运行状态信息的命令行工具,常用于在运行期定位虚拟机性能问题。它可以显示本地或远程虚拟机中的类加载、内存、垃圾回收、即时编译等运行时数据。
jstat使用方法
命令格式: jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数 | 作用 |
---|
-t | 在第一列输出时间戳。时间戳是自目标JVM启动时间以来的时间。 |
-h n | 周期性输出数据的时候,每隔n次输出一次表头 ;默认n=0,表示只在第一列输出表头 |
vmid | 如果是本地虚拟机进程,则与LVMID一致,可使用jps命令进行查看; 如果是远程虚拟机进程,其格式则为: [protocol:][//]lvmid[@hostname[:port]/servername] |
interval | 输出间隔 |
count | 输出次数 ,不加时会一直输出 |
options: JDK版本不同,其选项可能会有细微差别。
options | 作用 |
---|
-class | 查看类加载数、卸载数、占用空间、类装载耗费的时间 |
-compiler | 查看即时编译过的方法、耗时 |
-gc | 查看Java堆各个区的总空间、已用空间、垃圾收集耗费的时间 |
-gcutil | 与-gc类似,主要关注各个区空间使用百分比 |
-gccapacity | 与-gc类似,但主要关注运行过程中各个区的最大使用空间、最小使用空间 |
-gccause | 与-gcutil类似,但会额外输出导致最后一次GC的原因 |
-gcmetacapacity | 元空间最大最小空间 |
-gcnew | 监视新生代垃圾收集状况 |
-gcnewcapacity | 与-gcnew类似,主要关注最大最小空间 |
-gcold | 监视老年代垃圾收集情况 |
-gcoldcapacity | 与-gcold类似,主要关注最大最小空间 |
-printcompilation | 输出已被即时编译的方法 |
使用示例
- jstat -class 11146: 查看类加载信息(先使用jps查询出LVMID)
david@UX501:~$ jps
11175 Jps
11146 Test
david@UX501:~$ jstat -class 11146
Loaded Bytes Unloaded Bytes Time
405 833.7 0 0.0 0.03
字段 | 含义 |
---|
Loaded | 已加载类的数量 |
Bytes | 已加载类的大小 |
Unloaded | 已卸载类的数量 |
Bytes | 已卸载类的大小 |
Time | 执行类加载和卸载操作所花费的总时间 |
- jstat -compiler 11146 : 查看HotSpot VM即时编译统计信息。
david@UX501:~$ jstat -compiler 11146
Compiled Failed Invalid Time FailedType FailedMethod
90 0 0 0.10 0
字段 | 含义 |
---|
Compiled | 编译成功次数 |
Failed | 编译失败次数 |
Invalid | 编译无效次数 |
Time | 即时编译耗费的时间 |
FailedType | 上一次编译失败的编译类型 |
FailedMethod | 上一次编译失败的类名和方法名 |
- jstat -gc 11146: 查看GC相关的统计信息
david@UX501:~$ jstat -gc 11146
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
7680.0 7680.0 0.0 0.0 48640.0 15693.4 128512.0 0.0 4480.0 777.9 384.0 74.5 0 0.000 0 0.000 0.000
字段 | 含义 |
---|
S0C | 当前S0容量(kB) |
S1C | 当前S1的容量(kB) |
S0U | S0已用空间(kB) |
S1U | S1已用空间(kB) |
EC | Eden区容量(kB) |
EU | Eden区已用空间(kB) |
OC | 老年代容量(kB) |
OU | 老年代已用空间(kB) |
MC | 元空间容量(kB) |
MU | 元空间已用空间(kB) |
CCSC | 压缩类空间容量(kB) |
CCSU | 已使用的压缩类空间大小(kB) |
YGC | YGC次数 |
YGCT | YGC耗费总时间 |
FGC | FGC次数 |
FGCT | FGC耗费总时间 |
GCT | GC耗费的时间总和 |
- jstat -gccapacity 11146: 显示各个区的容量及相应空间统计信息
david@UX501:~$ jstat -gccapacity 11146
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
64000.0 1018880.0 64000.0 7680.0 7680.0 48640.0 128512.0 2038784.0 128512.0 128512.0 0.0 1056768.0 4480.0 0.0 1048576.0 384.0 0 0
字段 | 含义 |
---|
NGCMN | 最小新生代容量 (kB). |
NGCMX | 最大新生代容量 (kB). |
NGC | 当前新生代容量 (kB). |
S0C | 当前S0容量 (kB). |
S1C | 当前S1容量 (kB). |
EC | 当前Eden区容量 (kB). |
OGCMN | 最小老年代容量 (kB). |
OGCMX | 最大老年代容量 (kB). |
OGC | 当前老年代容量 (kB). |
OC | 当前老年代容量 (kB). |
MCMN | 最小元空间容量 (kB). |
MCMX | 最大元空间容量 (kB). |
MC | 元空间容量 (kB). |
CCSMN | 最小类压缩空间容量 (kB). |
CCSMX | 最大类压缩空间容量 (kB). |
CCSC | 类压缩容量 (kB). |
YGC | YGC次数 |
FGC | FGC次数 |
- jstat -gccause 11146: 显示有关GC相关的统计(与相同-gcutil),以及最近和当前(如果适用)GC原因。
david@UX501:~$ jstat -gccause 11146
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 0.00 64.37 0.00 17.36 19.39 0 0.000 0 0.000 0.000 No GC No GC
字段 | 含义 |
---|
LGCC | 上一次GC原因 |
GCC | 当前GC原因 |
其它字段 | 与-gcutil查询出的信息相同 |
- jstat -gcnew 11146: 查看与新生代相关的统计数据
david@UX501:~$ jstat -gcnew 11146
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
7680.0 7680.0 0.0 0.0 15 15 0.0 48640.0 34228.2 0 0.000
字段 | 含义 |
---|
S0C | 当前S0容量(kB) |
S1C | 当前S1的容量(kB) |
S0U | S0已使用(kB) |
S1U | S1已使用(kB) |
TT | 持有次数 |
MTT | 最大持有次数 |
DSS | 所需的幸存者大小(kB) |
EC | 当前Eden区容量(kB) |
EU | Eden区已用(kB) |
YGC | YGC次数 |
YGCT | YGC消耗的时间 |
- jstat -gcnewcapacity 11146: 新生代空间统计
david@UX501:~$ jstat -gcnewcapacity 11146
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
64000.0 1018880.0 64000.0 339456.0 7680.0 339456.0 7680.0 1017856.0 48640.0 0 0
字段 | 含义 |
---|
NGCMN | 新生代最小容量 (kB). |
NGCMX | 新生代最大容量(kB). |
NGC | 当前新生代容量 (kB). |
S0CMX | S0最大容量(kB). |
S0C | 当前S0容量 (kB). |
S1CMX | S1最大容量 (kB). |
S1C | 当前S1容量 (kB). |
ECMX | Eden区最大容量 (kB). |
EC | 当前Eden区容量 (kB). |
YGC | YGC次数 |
FGC | FGC次数 |
- jstat -gcold 11146: 查看老年代和元空间相关统计
david@UX501:~$ jstat -gcold 11146
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
4480.0 777.9 384.0 74.5 128512.0 0.0 0 0 0.000 0.000
字段 | 含义 |
---|
MC | 元空间容量大小 (kB). |
MU | 元空间已用大小 (kB). |
CCSC | 类压缩空间容量 (kB). |
CCSU | 类压缩空间已用大小(kB). |
OC | 老年代容量 (kB). |
OU | 老年代空间已用大小 (kB). |
YGC | YGC次数 |
FGC | FGC次数 |
FGCT | FGC耗费的时间 |
GCT | GC耗费总时间 |
- jstat -gcoldcapacity 11146: 查看老年代有关容量的统计信息
david@UX501:~$ jstat -gcoldcapacity 11146
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
128512.0 2038784.0 128512.0 128512.0 0 0 0.000 0.000
字段 | 含义 |
---|
OGCMN | 老年代最小容量 (kB) |
OGCMX | 老年代最大容量(kB) |
OGC | 老年代当前容量 (kB) |
OC | 老年代当前容量 (kB) |
YGC | YGC次数 |
FGC | FGC次数 |
FGCT | FGC消耗的时间 |
GCT | GC总耗时 |
- jstat -gcmetacapacity 11146: 有关元空间容量大小统计信息
david@UX501:~$ jstat -gcmetacapacity 11146
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 4864.0 0.0 1048576.0 512.0 1 0 0.000 0.025
字段 | 含义 |
---|
MCMN | 元空间最小容量 (kB). |
MCMX | 元空间最大容量 (kB). |
MC | 元空间容量 (kB). |
CCSMN | 类压缩空间最小容量 (kB). |
CCSMX | 类压缩空间最大容量 (kB). |
YGC | YGC次数 |
FGC | FGC次数 |
FGCT | FGC消耗的时间 |
GCT | GC耗费总时间 |
- jstat -gcutil 11146: 查看GC统计摘要
david@UX501:~$ jstat -gcutil 11146
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 99.79 21.78 6.18 53.48 52.75 1 0.025 0 0.000 0.025
字段 | 含义 |
---|
S0 | S0已用空间 (%) |
S1 | S1已用空间 (%) |
E | Eden已用空间 (%) |
O | 老年代已用空间 (%) |
M | 元空间已用空间 (%) |
CCS | 已用类压缩空间 (%) |
YGC | YGC次数 |
YGCT | YGC耗费的时间 |
FGC | FGC次数 |
FGCT | FGC耗费的时间 |
GCT | GC耗费的总时间 |
- jstat -printcompilation 11146: 查看即时编译相关的统计信息
david@UX501:~$ jstat -printcompilation 11146
Compiled Size Type Method
105 38 1 java/io/PrintStream println
字段 | 含义 |
---|
Compiled | 最近编译的方法执行的编译任务数 |
Size | 最近编译的方法的字节码的字节数 |
Type | 最近编译方法的编译类型 |
Method | 最近编译的方法的类名和方法名 |
参考资料
Oracle官方文档–jstat
注: 未经授权,禁止转载