JSTAT COMMAND
监控JVM统计数据,这个命令是实验性的,不支持
概要
jstat [generalOption | outputOptions vmid [interval[s|ms][count]]]
- generalOption : 通用命令行选项
-help
或者options
。查看General Options。 - outputOptions : 一个或多个输出选项,由单个statOption组成,加上-t、-h和-J选项中的任何一个。
- vmid : 虚拟机标志,指定目标JVM的字符串。通常语法如下:
[protocol:][//]lvmid[@hostname[:port]/servername]
vmid字符串的语法对应URI的语法。 - interval[s|ms] : 以指定单位【秒|毫秒】间隔取样。默认是毫秒。必须是正数。当指定参数时,
jstat
命令会在每个间隔输出数据。 - count : 展示样本的数量。必须是正数,默认展示直到JVM中断,或者
jstat
命令中断。
描述
jstat命令显示有导航Java HotSpot VM的性能统计信息。 目标JVM由其虚拟机标识符或vmid选项标识。
虚拟机标识符
vmid字符串语法对应URI的语法:
[protocol:][//]lvmid[@hostname[:port]/servername]
- protocol : 连接协议。如果省略了协议值,没有指定主机名,那么默认协议就是特定于平台的优化本地协议。 如果省略协议值并指定主机名,则默认协议为rmi。
- lvmid : 目标JVM的本地虚拟机标识符。lvmid是系统识别JVM的平台指定值,是虚拟机标识符唯一需要的组件。lvmid通常是但不一定是目标JVM进程的操作系统进程标识符。可以用
JPS
命令来确定lvmid。同样也可以在Solaris,Linux, OS X平台用`ps``命令,在Windows用任务管理器来确定。 - hostname : 目标主机的名称或者IP地址。如果省略主机名,目标主机就是本地主机。
- port : 连接远程服务的默认端口号。如果省略主机名值或协议值指定优化的本地协议,则忽略端口值,否则,端口参数的处理是特定实现的。对于默认的rmi协议,端口值指示远程主机上rmiregistry的端口号。 如果省略端口值,协议值指示
rmi
,则使用默认的rmiregistry端口(1099)。 - servername : servername参数的处理取决于具体实现。对于优化的本地协议,这个属性是忽略的。对于
rmi
协议,它表示远程主机上RMI远程对象是我名称。
选项
jstat
支持两个类型的选项,general options
和output options
。通用选项显示简单的使用和版本信息。输出选项决定内容和统计数据的格式。所有的选项和功能都将在未来的版本中改变和移除。
General Options
如果指定通用选项其中一个,就不能指定任何其他的选项或参数。
-
-help
展示帮助信息。
-
-options
展示静态选项列表。看
Output Options
。
Output Options
如果不指定通用选项,可以指定输出选项。输出选项决定jstat
命令输出的内容和格式。单个statOption
加上其他的选项(-h,-t,-J
)。statOption
在前面。
使用-t
选项展示时间戳栏,在输出的第一栏标记为Timestamp。这一栏包含从目标JVM开始消耗的时间,单位秒。
使用间隔和次数参数来决定命令输出的频率。
注意:不要编写脚本来解析jstat命令的输出,因为格式可能会在以后的版本中发生变化。 如果您编写了解析jstat命令输出的脚本,那么希望为该工具的未来版本修改它们。
-
statOption
决定
jstat
命令展示的统计信息。以下是可用选项,使用-options
通用选项来展示为特定平台安装的选项列表。看Stat Options and Output- class : 展示有关类加载器行为的统计信息。
- compiler : 展示Java HotSpot VM JIT编译行为的统计信息。
- gc : 展示垃圾回收堆行为的统计信息。
- gccapacity : 展示世代及他们对应空间容量的统计信息。
- gccause : 显示有关垃圾收集统计的摘要(与-gcutil相同),并显示上次和当前(适用时)垃圾收集事件的原因。
- gcnew : 展示新生代行为的统计信息。
- gcnewcapacity : 展示新生代及对应空间大小的统计信息。
- gcold : 展示老年代及元数据区行为的统计信息。
- gcoldcapacity : 展示老年代空间的统计信息。
- gcmetacapacity : 展示元空间大小的统计信息。
- gcutil : 展示垃圾回收统计信息摘要。
- printcompilation : 展示Java HotSpot VM编译方法统计信息。
-
-h n
每N个样本(输出行数)展示列头,N是正整数。默认是0,在数据的第一行展示列头。
-
-t
在输出的第一栏展示时间戳(从目标JVM开启的时间开始)。
-
-JjavaOption
将java选项传递给Java应用程序启动程序。例如:
-J-Xms48m
表示设置启动为48m。可查看java命令。
Stat Options and Output
以下是
jstat
命令输出每列的摘要信息。
-
-class option
类加载统计信息
- Loaded : 加载类的数量
- Bytes : 加载的kB的数
- Unloaded : 卸载类的数量
- Bytes : 卸载的kB的数
- Time : 执行类加载和卸载操作花费的时间
-
-compiler option
Java HotSpot VM JIT 编译统计数据
- Compiled : 编译任务执行的数量
- Failed : 编译任务失败的数量
- Invalid : 无效的编译任务的数量
- Time : 执行编译任务的时间
- FailedType : 上次失败编译的类型
- FailedMethod : 上次失败编译的方法和类名
-
-gc option
回收垃圾堆统计信息,单位KB。
- S0C : 当前Survivor空间0的容量
-
S1C : 当前Survivor空间1的容量
- S0U : Survivor空间0已用
-
S1U : Survivor空间1已用
- EC : 当前eden区空间容量
-
EU : eden区已用
- OC : 当前老年代空间容量
-
OU : 老年代已用
- MC : 元空间容量
-
MU : 元空间已用
- CCSC : 压缩类空间容量
-
CCSU : 压缩类空间已用
- YGC : 年轻代垃圾回收时间的数量
-
YGCT : 年轻代垃圾回收的时间
- FGC : Full GC事件的数量
-
FGCT : FUll GC时间
- GCT : 总的垃圾回收时间
-
-gccapacity option
世代内存池和空间容量,单位KB。
Note(COPIED) : I just seek from the jdk source
in short:
OGC = sum(all OC)
A gen may contain MORE THAN ONE spaces.
However, Hotspot old gen has only 1 space ( young gen has 3: eden , s0 and s1 ), jstat shows the same value for them.
- NGCMN : 最小新生代容量
- NGCMX : 最大新生代容量
- NGC : 当前新生代容量
- S0C : 当前Survivor空间0的容量
- S1C : 当前Survivor空间1的容量
- EC : 当前eden区的容量
- OGCMN : 最小老年代容量
- OGCMX : 最大老年代容量
- OGC : 当前老年代容量
- OC : 当前老年空间容量
- MCMN : 最小元空间容量
- MCMX : 最大元空间容量
- MC : 元空间容量
- CCSMN : 压缩类空间最小容量
- CCSMX : 压缩类空间最大容量
- CCSC : 压缩类空间容量
- YGC : 年轻代GC事件的数量
- FGC : Full GC事件的数量
-
-gccause option
这个选项展示和
-gcutil
一样垃圾回收统计信息的摘要,但是包含了上次和当前垃圾回收(应用时)事件的原因。除了为-gcutil
列出的列外,此选项还添加以下列。- LGCC : 上次垃圾回收的原因
- GCC : 当前垃圾回收的原因
-
-gcnew option
新生代统计信息
- S0C : 当前Survivor空间0的容量
- S1C : 当前Survivor空间1的容量
- S0U : Survivor空间0已用
- S1U : Survivor空间1已用
- TT : 占有阈值
- MTT : 最大占有阈值
- DSS : 需要的Survivor大小
- EC : 当前eden区容量
- EU : eden区已用
- YGC : 年轻代GC事件的数量
- YGCT : 年轻代垃圾回收时间
-
-gcnewcapacity option
新生代空间统计信息,单位KB。
- NGCMN : 最小新生代容量
- NGCMX : 最大新生代容量
- NGC : 当前新生代容量
- SOCMX : 最大Survivor空间0容量
- S0C : 当前Survivor空间0容量
- S1CMX : 最大Survivor空间1容量
- S1C : 当前Survivor空间1容量
- ECMX : 最大eden空间容量
- EC : 当前eden去空间容量
- YGC : 年轻代GC事件的数量
- FGC : Full GC事件的数量
-
-gcold option
老年代和元空间行为统计信息,单位KB。
- MC : 元空间容量
- MU : 元空间已用
- CCSC : 压缩类空间容量
- CCSU : 压缩类空间已用
- OC : 当前年老区空间容量
- CU : 老年区已用
- YGC : 年轻代GC事件的数量
- FGC : Full GC事件的数量
- FGCT : Full GC时间
- GCT : 总的垃圾回收时间
-
-gcoldcapacity option
老年代大小统计信息,单位KB。
- OGCMN : 最小老年代容量
- OGCMX : 最大老年代容量
- OGC : 当前老年代容量
- OC : 当前年老区空间容量
- YGC : 年轻代GC事件的数量
- FGC : Full GC事件的数量
- FGCT : Full GC时间
- GCT : 总的垃圾回收时间
-
-gcmetacapacity option
元空间大小统计信息,单位KB。
- MCMN : 最小元空间容量
- MCMX : 最大元空间容量
- MC : 元空间容量
- CCSMN : 压缩类空间最小容量
- CCSMX : 压缩类空间最大容量
- YGC : 年轻代GC事件的数量
- FGC : Full GC事件的数量
- FGCT : Full GC时间
- GCT : 总的垃圾回收时间
-
-gcutil option
垃圾回收统计信息摘要
- S0 : 空间当前容量Survivor空间0已用百分比
- S1 : 空间当前容量Survivor空间1已用百分比
- E : 空间当前容量eden区已用百分比
- O : 空间当前容量年老区已用百分比
- M : 空间当前空量元空间已用百分比
- CCS : 压缩类空间已用百分比
- YGC : 年轻代GC事件数量
- YGCT : 年轻代垃圾回收事件
- FGC : Full GC事件数量
- FGCT : Full GC事件
- GCT : 总的垃圾回收时间
-
-printcompilation option
Java HotSpot VM编译方法统计信息
- Compiled : 最近编译的方法执行的编译任务数
- Size : 最近编译的方法字节码大小
- Type : 最近编译的方法的编译类型
- Method : 最近编译的方法的类名和方法名。类名使用
/
而不是.
作为命名空间分割符。
示例
本地JVM(lvmid为21891)的监控情况示例。
The gcutil Option
这个例子连接本地21891的JVM,取7个样本,间隔时间为250ms,指定
-gcutil
选项来展示输出内容
jstat -gcutil 21891 250 7
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 97.02 70.31 66.80 95.52 89.14 7 0.300 0 0.000 0.300
0.00 97.02 86.23 66.80 95.52 89.14 7 0.300 0 0.000 0.300
0.00 97.02 96.53 66.80 95.52 89.14 7 0.300 0 0.000 0.300
91.03 0.00 1.98 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 15.82 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378
91.03 0.00 17.80 68.19 95.89 91.24 8 0.378 0 0.000 0.378
这个示例显示在第三个和第四个样本发生了一次young GC。GC花费了0.078秒并促使eden区的对象转移到老年区,老年区的使用率从66.8%上升到68.19%。在GC之前,Survivor空间使用率为97.02%,GC之后下降到91.03%。