文章目录
1. jstat 工具简介
jstat(JVM Statistics Monitoring Tool) 用于监控虚拟机各种运行状态信息,可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。它位于JDK 的 bin 目录下,可利用JVM内建的指令对Java应用程序的资源和性能进行实时的监控,包括了对Heap size和垃圾回收状况的监控
2. jstat 参数及功能
2.1 jstat 参数总览
在 Linux/Mac 系统下,只要在终端中使用命令 man jstat
都可以方便地查看 jstat 命令的帮助文档。JDK1.8 jstat 命令的格式如下:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
- 参数解释:
命令参数 | 功能 |
---|---|
Option | 选项,一般使用 -gcutil 查看gc情况,必需 |
vmid | VM的进程号,即运行的java进程号,必需 |
interval | 间隔时间,单位为秒或者毫秒 |
count | 打印次数,如果缺省则打印无数次 |
Option 代表了查看信息的类型,主要分为3类:类装载、垃圾收集和运行期编译状况,取值范围如下:
选项 | 功能 |
---|---|
-class | 类加载的信息统计 |
-compiler | HotSpot即时编译器的行为统计 |
-gc | 堆的垃圾回收器的行为统计 |
-gccapacity | JVM 各代区域以及对应空间的容量统计 |
-gccause | 垃圾回收的摘要信息(等同于-gcutil), 以及最后的和当前的(如适用)垃圾回收事件的原因 |
-gcnew | 新生代的 gc 信息统计 |
-gcnewcapacity | 新生代及其对应空间的大小统计 |
-gcold | 老年代 gc 信息统计 |
-gcoldcapacity | 老年代的大小统计 |
-gcpermcapacity | 永久代的大小统计,JDK 1.8 不在有永久代,已放弃支持 |
-gcutil | 垃圾回收统计的摘要信息 |
-printcompilation | HotSpot汇编方法统计 |
2.2 Option 参数详解
2.2.1 –class
class 参数监视类装载、卸载数量、总空间及类装载所耗费的时间,常用方式为 jstat –class <pid>
,打印信息含义如下:
列字段 | 表示的信息 |
---|---|
Loaded | 加载的类的数量 |
Bytes | 加载的 Kb 数 |
Unloaded | 已卸载的类的数量 |
Bytes | 已卸载的Kb 数 |
Time | 执行类的加载和卸载操作所耗费的时间 |
2.2.2 –compiler
compiler选项输出即时(Just-In-Time)编译器的统计信息,使用方式jstat -compiler <pid>
,打印信息的含义:
列字段 | 表示的信息 |
---|---|
Compiled | 已执行的编译任务数 |
Failed | 失败的编译任务数 |
Invalid | 无效的编译任务数 |
Time | 执行编译任务所耗费的时间 |
FailedType | 最后失败的编译的编译类型 |
FailedMethod | 最后失败的编译的类名和方法 |
2.2.3 -gc
jstat -gc <pid>
可以打印 gc 的信息,查看 gc 的次数及消耗的时间
列字段 | 表示的信息 |
---|---|
S0C | survivor space 0的当前容量(KB) |
S1C | survivor space 1的当前容量(KB) |
S0U | survivor space 0使用的容量(KB) |
S1U | survivor space 1使用的容量(KB) |
EC | Eden space 的当前容量(KB) |
EU | Edenspace 的已用容量(KB) |
OC | Oldspace 的当前容量(KB) |
OU | Old space 的已用容量(KB) |
PC | Permanent space 的当前容量(KB) |
PU | Permanentspace 的已用容量(KB) |
YGC | Young generation 的GC事件数量 |
YGCT | Young generation 的垃圾回收事件 |
FGC | Full GC 事件的数量 |
FGCT | Full GC 的时间 |
GCT | 总计的垃圾回收时间 |
2.2.4 -gccapacity
jstat -gccapacity <pid>
可以显示VM内存中各代区域中对象的使用和占用大小
列字段 | 表示的信息 |
---|---|
NGCMN | new generation 的最小容量(KB) |
NGCMX | new generation 的最大容量(KB) |
NGC | new generation 的当前容量(KB) |
S0C | survivor space 0 的当前容量(KB) |
S1C | survivor space 1 的当前容量(KB) |
EC | Eden space 的当前容量(KB) |
OGCMN | Old generation 的最小容量(KB) |
OGCMX | Old generation 的最大容量(KB) |
OGC | Old generation 的当前容量(KB) |
OC | Old space 的当前容量(KB) |
PGCMN | Permanent generation 的最小容量(KB) |
YGC | Young generation 的GC事件数 |
FGC | Full GC 事件的数量 |
2.2.5 - gcutil
jstat -gcutil <pid>
打印垃圾回收统计的摘要信息
列字段 | 表示的信息 |
---|---|
S0 | Survivor space 0已用容量占当前容量的百分比 |
S1 | Survivor space 1已用容量占当前容量的百分比 |
E | Eden space已用容量占当前容量的百分比 |
O | Old space已用容量占当前容量的百分比 |
P | Permanent space已用容量占当前容量的百分比 |
YGC | young generation的GC事件数 |
YGCT | Young generation的垃圾回收时间 |
FGC | Full GC事件的数量 |
FGCT | Full GC的时间 |
GCT | 总计的垃圾回收时间 |
2.2.6 -gccause
jstat -gccause <pid>
显示与-gcutil
选项相同的垃圾回收统计摘要信息,但却添加了最后的和当前的(如适用)垃圾回收事件的原因,主要为以下两列:
列字段 | 表示的信息 |
---|---|
LGCC | 最后的垃圾回收的原因 |
GCC | 当前的垃圾回收的原因 |
2.2.7 -gcnew
jstat -gcnew <pid>
打印年轻代垃圾回收信息
列字段 | 表示的信息 |
---|---|
S0C | survivor space 0的当前容量(KB) |
S1C | survivor space 1的当前容量(KB) |
S0U | survivor space 0的已用容量(KB) |
S1U | survivor space 1的已用容量(KB) |
TT | Tenuring threshold 对象年龄期限阈值,超过则晋升到老年代 |
MTT | 对象年龄最大的期限阈值,最大为15,因为对象头中使用 4 个比特位保存该值 |
DSS | 所需的幸存者(survivor)大小(KB) |
EC | Eden space的当前容量(KB) |
EU | Eden space的已用容量(KB) |
YGC | Young generation 的GC事件数 |
YGCT | Young generation 的垃圾回收时间 |
2.2.8 -gcnewcapacity
jstat -gcnewcapacity <pid>
打印年轻代容量及其对应空间
列字段 | 表示的信息 |
---|---|
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 | 新生代GC(Minor GC/Young GC)发生的次数 |
FGC | Full GC发生的次数 |
2.2.9 -gcold
jstat -gcold <pid>
打印老年代(old generation)以及元空间(metaspace)相关gc信息
列字段 | 表示的信息 |
---|---|
MC | 元空间(Metaspace)容量, 单位KB |
MU | 元空间(Metaspace)使用量, 单位KB |
CCSC | CCS空间容量, 单位KB |
CCSU | CCS空间使用量, 单位KB |
OC | 当前老年代容量, 单位KB |
OU | 老年代使用量, 单位KB |
YGC | 新生代GC(Minor GC/Young GC)发生的次数 |
FGC | Full GC发生的次数 |
FGCT | Full GC消耗的时间, 单位s |
GCT | 所有GC消耗的总时间(包含YGC和FGC), 单位s |
2.2.10 -gcoldcapacity
jstat -gcoldcapacity <pid>
打印老年代容量信息
列字段 | 表示的信息 |
---|---|
OGCMN | 老年代最小容量, 单位KB |
OGCMX | 老年代最大容量, 单位KB |
OGC | 当前老年代容量, 单位KB |
OC | 当前老年代容量, 单位KB |
YGC | 新生代GC(Minor GC/Young GC)发生的次数 |
FGC | Full GC发生的次数 |
FGCT | Full GC消耗的时间, 单位s |
GCT | 所有GC消耗的总时间(包含YGC和FGC), 单位s |
2.2.11 -gcmetacapacity
jstat -gcmetacapacity <pid>
打印元空间容量信息
列字段 | 表示的信息 |
---|---|
MCMN | 元空间(Metaspace)最小容量, 单位KB |
MCMX | 元空间(Metaspace)最大容量, 单位KB |
MC | 当前元空间(Metaspace)容量, 单位KB |
CCSMN | CCS空间最小容量, 单位KB |
CCSMX | CCS空间最大容量, 单位KB |
YGC | 新生代GC(Minor GC/Young GC)发生的次数 |
FGC | Full GC发生的次数 |
FGCT | Full GC消耗的时间, 单位s |
GCT | 所有GC消耗的总时间(包含YGC和FGC), 单位s |
2.2.12 -printcompilation
jstat -printcompilation <pid>
打印编译方法(JIT)相关信息
列字段 | 表示的信息 |
---|---|
Compiled | 由最近编译的方法执行的编译任务的数量 |
Size | 最近编译的方法的字节码的字节数 |
Type | 最近编译的方法的编译类型 |
Method | 标识最近编译的方法的类名和方法名 |