美文网首页Java 虚拟机IT@程序员猿媛【学】@Jav...
【Java 虚拟机笔记】jstat 虚拟机统计监视工具相关整理

【Java 虚拟机笔记】jstat 虚拟机统计监视工具相关整理

作者: 58bc06151329 | 来源:发表于2019-02-27 16:14 被阅读81次

文前说明

作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

本文仅供学习交流使用,侵权必删。
不用于商业目的,转载请注明出处。

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 选项进行设置。

相关文章

网友评论

    本文标题:【Java 虚拟机笔记】jstat 虚拟机统计监视工具相关整理

    本文链接:https://www.haomeiwen.com/subject/pcjfuqtx.html