【Java 虚拟机笔记】jstat 虚拟机统计监视工具相关整理
2019-02-27 本文已影响81人
58bc06151329
文前说明
作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。
本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。
1. 虚拟机统计监视工具(JVM Statistics Monitoring Tool)
- jstat 是用于监视虚拟机各种运行状态信息的命令行工具。
- 可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据,在没有 GUI 图形界面,只提供了纯文本控制台环境的服务器上,将是运行期定位虚拟机性能问题的首选工具。
命令格式
-
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
- generalOption 是单个 常规命令行选项(-help、-options 或 -version)。
- outputOptions 是一个或多个 输出选项。
- vmid 是 虚拟机标识符,指示目标 Java 虚拟机进程(JVM)的字符串。
- vmid 字符串的语法在很大程度上对应于 URI 的语法。
- vmid 可以从表示本地虚拟机的简单整数变为指定 COM 的更复杂的构造。通信协议、端口号和其他特定于实现的值。
- [protocol:][//]lvmid[@hostname[:port]/servername]
- interval 是以指定单位(秒或毫秒)表示的采样间隔。
- 默认单位为毫秒,必须是正整数。如果指定,jstat 将在每个间隔采样。
- count 是要显示的样本数。
- 默认值是无穷大,jstat 显示统计信息直到目标虚拟机终止或 jstat 命令终止,必须是正整数。
通用选项 | 说明 |
---|---|
-help | 显示帮助信息。 |
-version | 显示版本信息。 |
-options | 显示统计选项列表(下表所列)。 |
-J | 将虚拟机参数传递给 jstat 调用的启动程序。例如 -J-Xms48m。。 |
stat 显示统计输出选项 | 说明 |
---|---|
-class | 类加载器 |
-compiler | JIT |
-gc | GC 堆状态 |
-gccapacity | 各区大小 |
-gccause | 最近一次 GC 统计和原因 |
-gcnew | 新生代统计 |
-gcnewcapacity | 新生代大小 |
-gcold | 老年代统计 |
-gcoldcapacity | 老年代大小 |
-gcpermcapacity | 永久代大小 |
-gcutil | GC 统计汇总 |
-printcompilation | HotSpot 编译统计 |
其他选项 | 说明 |
---|---|
-h<n> | 每隔 n 个样本(输出行)显示一个列标题,其中 n 是一个正整数。默认值为 0,显示第一行数据上方的列标题。 |
-t | 将时间戳列显示为输出的第一列。时间戳是自目标虚拟机开始时间起的时间。 |
1.1 class
- 显示加载 class 的数量,及所占空间等信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -class 28823
Loaded Bytes Unloaded Bytes Time
12857 26654.2 0 0.0 20.61
输出格式
显示列名 | 具体描述 |
---|---|
Loaded | 装载的类的数量 |
Bytes | 装载类所占用的字节数 |
Unloaded | 卸载类的数量 |
Bytes | 卸载类的字节数 |
Time | 装载和卸载类所花费的时间 |
1.2 compiler
- 显示虚拟机实时编译的数量等信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -compiler 28823
Compiled Failed Invalid Time FailedType FailedMethod
13152 0 0 109.18 0
输出格式
显示列名 | 具体描述 |
---|---|
Compiled | 编译任务执行数量 |
Failed | 编译任务执行失败数量 |
Invalid | 编译任务执行失效数量 |
Time | 编译任务消耗时间 |
FailedType | 最后一个编译失败任务的类型 |
FailedMethod | 最后一个编译失败任务所在的类及方法 |
1.3 gc
- 可以显示 GC 的信息,查看 GC 的次数及时间。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gc -t 28823
Timestamp S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
97555.1 15360.0 15360.0 0.0 14689.2 318976.0 25608.4 699392.0 259821.7 262144.0 82111.3 327 15.119 0 0.000 15.119
输出格式
显示列名 | 具体描述 |
---|---|
S0C | 新生代中 From Survivor 区的容量(字节)。 |
S1C | 新生代中 To Survivor 区的容量(字节)。 |
S0U | 新生代中 From Survivor 区目前已使用空间(字节)。 |
S1U | 新生代中 To Survivor 区目前已使用空间(字节)。 |
EC | 新生代中 Eden 区的容量(字节)。 |
EU | 新生代中 Eden 区目前已使用空间(字节)。 |
OC | 老年代的容量(字节)。 |
OU | 老年目前已使用空间(字节)。 |
PC | 永久代的容量(字节)。 |
PU | 永久代目前已使用空间(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC次数。 |
YGCT | 从应用程序启动到采样时 Minor GC 所用时间(s) |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s) |
GCT | 从应用程序启动到采样时 GC 用的总时间(s) |
1.4 gccapacity
- 显示虚拟机内存中三代(Young、Old 和 Perm)对象的使用和占用大小。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gccapacity 28823
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
349696.0 349696.0 349696.0 15360.0 15360.0 318976.0 699392.0 699392.0 699392.0 699392.0 262144.0 262144.0 262144.0 262144.0 328 0
输出格式
显示列名 | 具体描述 |
---|---|
NGCMN | 新生代中初始化(最小)的大小(字节)。 |
NGCMX | 新生代的最大容量(字节)。 |
NGC | 新生代中当前的容量(字节)。 |
S0C | 新生代中 From Survivor 区的容量(字节)。 |
S1C | 新生代中 To Survivor 区的容量(字节)。 |
EC | 新生代中 Eden 区的容量(字节)。 |
OGCMN | 老年代中初始化(最小)的大小(字节)。 |
OGCMX | 老年代的最大容量(字节)。 |
OGC | 老年代当前新生成的容量(字节)。 |
OC | 老年代的容量(字节)。 |
PGCMN | 永久代中初始化(最小)的大小(字节)。 |
PGCMX | 永久代的最大容量(字节)。 |
PGC | 永久代当前新生成的容量(字节)。 |
PC | 永久代的容量(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
1.5 gccause
- 显示最近一次 GC 统计和原因。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gccause 28823
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
95.53 0.00 63.16 37.25 31.32 330 15.203 0 0.000 15.203 Allocation Failure No GC
输出格式
显示列名 | 具体描述 |
---|---|
S0 | 新生代中 From Survivor 区已使用的占当前容量百分比。 |
S1 | 新生代中 To Survivor 区已使用的占当前容量百分比。 |
E | 新生代中 Eden 区已使用的占当前容量百分比。 |
O | 老年代已使用的占当前容量百分比。 |
P | 永久代已使用的占当前容量百分比。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
YGCT | 从应用程序启动到采样时 Minor GC 所用时间(s)。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s)。 |
GCT | 从应用程序启动到采样时 GC 总时间(s)。 |
LGCC | 上一次 GC 发生的原因。 |
GCC | 当前 GC 发生的原因。 |
部分原因 | 说明 |
---|---|
Allocation Failure | 最常见的内存分配失败触发的 GC。比如在 new 对象时。 |
System.gc() | 通过代码显示调用 System.gc() 触发。 |
Metadata GC Threshold | Metaspace 区域分配时分配不下,从而触发的 GC。 |
1.6 gcnew
- 显示新生代对象的信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcnew 28823
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
15360.0 15360.0 0.0 14591.0 1 15 15360.0 318976.0 240469.8 345 15.890
输出格式
显示列名 | 具体描述 |
---|---|
S0C | 新生代中 From Survivor 区的容量(字节)。 |
S1C | 新生代中 To Survivor 区的容量(字节)。 |
S0U | 新生代中 From survivor 区目前已使用空间(字节)。 |
S1U | 新生代中 To Survivor 区目前已使用空间(字节)。 |
TT | 持有次数限制。 |
MTT | 最大持有次数限制。 |
EC | 新生代中 Eden 区的容量(字节)。 |
EU | 新生代中 Eden 区目前已使用空间(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
YGCT | 从应用程序启动到采样时 Minor GC 所用时间(s)。 |
1.7 gcnewcapacity
- 显示新生代对象的信息及其占用量。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcnewcapacity 28823
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
349696.0 349696.0 349696.0 116224.0 15360.0 116224.0 15360.0 348672.0 318976.0 346 0
输出格式
显示列名 | 具体描述 |
---|---|
NGCMN | 新生代中初始化(最小)的大小(字节)。 |
NGCMX | 新生代的最大容量(字节)。 |
NGC | 新生代中当前的容量(字节)。 |
S0CMX | 新生代中 From Survivor 区的最大容量(字节)。 |
S0C | 新生代中 From Survivor 区的容量(字节)。 |
S1CMX | 新生代中 To Survivor 区的最大容量(字节)。 |
S1C | 新生代中 To Survivor 区的容量(字节)。 |
ECMX | 新生代中 Eden 区的最大容量(字节)。 |
EC | 新生代中 Eden 区的容量(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
1.8 gcold
- 显示老年代对象的信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcold 28823
PC PU OC OU YGC FGC FGCT GCT
262144.0 82165.3 699392.0 263982.0 350 0 0.000 16.077
输出格式
显示列名 | 具体描述 |
---|---|
PC | 永久代的容量(字节)。 |
PU | 永久代目前已使用空间(字节)。 |
OC | 老年代的容量(字节)。 |
OU | 老年代目前已使用空间(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s)。 |
GCT | 从应用程序启动到采样时 GC 所用总时间(s)。 |
1.9 gcoldcapacity
- 老年代对象的信息及其占用量。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcoldcapacity 28823
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
699392.0 699392.0 699392.0 699392.0 352 0 0.000 16.165
输出格式
显示列名 | 具体描述 |
---|---|
OGCMN | 老年代中初始化(最小)的大小(字节)。 |
OGCMX | 老年代的最大容量(字节)。 |
OGC | 老年代当前新生成的容量(字节)。 |
OC | 老年代的容量(字节)。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s)。 |
GCT | 从应用程序启动到采样时 GC 所用总时间(s)。 |
1.10 gcpermcapacity
- 永久代对象的信息及其占用量。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcpermcapacity 28823
PGCMN PGCMX PGC PC YGC FGC FGCT GCT
262144.0 262144.0 262144.0 262144.0 353 0 0.000 16.223
输出格式
显示列名 | 具体描述 |
---|---|
PGCMN | 永久代代中初始化(最小)的大小(字节)。 |
PGCMX | 永久代的最大容量(字节)。 |
PGC | 永久代代当前新生成的容量(字节)。 |
PC | 永久代的容量(字节) |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s)。 |
GCT | 从应用程序启动到采样时 GC 所用总时间(s)。 |
1.11 gcutil
- 统计 GC 信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -gcutil 28823
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 95.73 77.40 37.82 31.34 353 16.223 0 0.000 16.223
输出格式
显示列名 | 具体描述 |
---|---|
S0 | 新生代中 From Survivor 区已使用的占当前容量百分比。 |
S1 | 新生代中 To Survivor 区已使用的占当前容量百分比。 |
E | 新生代中 Eden 区已使用的占当前容量百分比。 |
O | 老年代已使用的占当前容量百分比。 |
P | 永久代已使用的占当前容量百分比。 |
YGC | 从应用程序启动到采样时 Minor GC 次数。 |
YGCT | 从应用程序启动到采样时 Minor GC 所用时间(s)。 |
FGC | 从应用程序启动到采样时 Full GC 次数。 |
FGCT | 从应用程序启动到采样时 Full GC 所用时间(s)。 |
GCT | 从应用程序启动到采样时 GC 总时间(s)。 |
1.12 printcompilation
- 显示当前虚拟机执行的信息。
执行样例
[root@localhost ~]# sudo -u ovirt jstat -printcompilation 28823
Compiled Size Type Method
13210 252 1 com/sun/org/apache/xerces/internal/utils/XMLSecurityManager getIndex
输出格式
显示列名 | 具体描述 |
---|---|
Compiled | 编译任务的数目 |
Size | 方法生成的字节码的大小 |
Type | 编译类型 |
Method | 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由 -XX:+PrintComplation 选项进行设置。 |