系列中的上一篇
当前教程
Jstat - 监控您的 JVM 统计信息

Jstat - 监控您的 JVM 统计信息

 

介绍 Jstat

jstat - 监控 JVM 统计信息

 

概要

注意: 此命令为实验性命令,不受支持。

jstat generalOptions

jstat outputOptions [-t] [-h lines] vmid [interval [count]]

generalOptions

单个通用命令行选项。请参阅 通用选项

outputOptions

-options 选项报告的选项。一个或多个输出选项,包括单个 statOption,以及任何 -t-h-J 选项。请参阅 jstat 命令的输出选项

-t

显示时间戳列作为输出的第一列。时间戳是自目标 JVM 启动时间以来的时间。

-h n

n 个样本(输出行)显示一个列标题,其中 n 是一个正整数。默认值为 0,它显示数据第一行的列标题。

vmid

虚拟机标识符,它是一个字符串,指示目标 JVM。请参阅 虚拟机标识符

interval

以指定单位(秒 (s) 或毫秒 (ms))表示的采样间隔。默认单位为毫秒。这必须是一个正整数。指定后,jstat 命令将在每个间隔产生其输出。

count

要显示的样本数。默认值为无穷大,这会导致 jstat 命令显示统计信息,直到目标 JVM 终止或 jstat 命令终止。此值必须是一个正整数。

 

描述

jstat 命令显示已检测 Java HotSpot VM 的性能统计信息。目标 JVM 由其虚拟机标识符或 vmid 选项标识。

jstat 命令支持两种类型的选项:通用选项和输出选项。通用选项会导致 jstat 命令显示简单的使用情况和版本信息。输出选项确定统计输出的内容和格式。

所有选项及其功能可能会在将来的版本中发生更改或删除。

 

通用选项

如果指定了通用选项之一,则不能指定任何其他选项或参数。

-help

显示帮助消息。

-options

显示静态选项列表。请参阅 jstat 命令的输出选项

 

jstat 命令的输出选项

如果未指定通用选项,则可以指定输出选项。输出选项确定 jstat 命令输出的内容和格式,并且包括单个 statOption,以及任何其他输出选项 (-h-t-J)。statOption 必须放在首位。

输出格式化为表格,列之间用空格分隔。带有标题的标题行描述了列。使用 -h 选项设置显示标题的频率。列标题名称在不同的选项之间保持一致。一般来说,如果两个选项提供具有相同名称的列,则两个列的数据源相同。

使用 -t 选项显示时间戳列,标记为 Timestamp 作为输出的第一列。Timestamp 列包含自目标 JVM 启动以来的经过时间(以秒为单位)。时间戳的分辨率取决于各种因素,并且由于在负载过重的系统上线程调度延迟而可能发生变化。

使用 interval 和 count 参数分别确定 jstat 命令显示其输出的频率和次数。

注意

不要编写脚本以解析 jstat 命令的输出,因为格式可能会在将来的版本中发生更改。如果编写解析 jstat 命令输出的脚本,则需要为该工具的未来版本修改它们。

-statOption

确定 jstat 命令显示的统计信息。以下列出了可用选项。使用 -options 通用选项显示特定平台安装的选项列表。请参阅 Stat 选项和输出

class: 显示有关类加载器行为的统计信息。

compiler: 显示有关 Java HotSpot VM 即时编译器的行为的统计信息。

gc: 显示有关垃圾回收堆行为的统计信息。

gccapacity: 显示有关各代及其对应空间的容量的统计信息。

gccause: 显示有关垃圾回收统计信息的摘要(与 -gcutil 相同),包括最近一次和当前(如果适用)垃圾回收事件的原因。

gcnew: 显示有关新生代行为的统计信息。

gcnewcapacity: 显示有关新生代及其对应空间的大小统计信息。

gcold: 显示有关老年代和元空间统计信息的统计信息。

gcoldcapacity: 显示有关老年代大小的统计信息。

gcmetacapacity: 显示有关元空间大小的统计信息。

gcutil: 显示有关垃圾回收统计信息的摘要。

printcompilation: 显示 Java HotSpot VM 编译方法统计信息。

-JjavaOption

javaOption 传递给 Java 应用程序启动器。例如,-J-Xms48m 将启动内存设置为 48 MB。有关选项的完整列表,请参阅 java

 

Stat 选项和输出

以下信息总结了 jstat 命令为每个 statOption 输出的列。

-class option

类加载器统计信息。

    `Loaded`: Number of classes loaded.
    
    `Bytes`: Number of KB loaded.
    
    `Unloaded`: Number of classes unloaded.
    
    `Bytes`: Number of KB unloaded.
    
    `Time`: Time spent performing class loading and unloading operations.

-compiler option

Java HotSpot VM 即时编译器统计信息。

    `Compiled`: Number of compilation tasks performed.
    
    `Failed`: Number of compilations tasks failed.
    
    `Invalid`: Number of compilation tasks that were invalidated.
    
    `Time`: Time spent performing compilation tasks.
    
    `FailedType`: Compile type of the last failed compilation.
    
    `FailedMethod`: Class name and method of the last failed compilation.

-gc option

垃圾回收堆统计信息。

    `S0C`: Current survivor space 0 capacity (KB).
    
    `S1C`: Current survivor space 1 capacity (KB).
    
    `S0U`: Survivor space 0 utilization (KB).
    
    `S1U`: Survivor space 1 utilization (KB).
    
    `EC`: Current eden space capacity (KB).
    
    `EU`: Eden space utilization (KB).
    
    `OC`: Current old space capacity (KB).
    
    `OU`: Old space utilization (KB).
    
    `MC`: Metaspace Committed Size (KB).
    
    `MU`: Metaspace utilization (KB).
    
    `CCSC`: Compressed class committed size (KB).
    
    `CCSU`: Compressed class space used (KB).
    
    `YGC`: Number of young generation garbage collection (GC) events.
    
    `YGCT`: Young generation garbage collection time.
    
    `FGC`: Number of full GC events.
    
    `FGCT`: Full garbage collection time.
    
    `GCT`: Total garbage collection time.

-gccapacity option

内存池代和空间容量。

    `NGCMN`: Minimum new generation capacity (KB).
    
    `NGCMX`: Maximum new generation capacity (KB).
    
    `NGC`: Current new generation capacity (KB).
    
    `S0C`: Current survivor space 0 capacity (KB).
    
    `S1C`: Current survivor space 1 capacity (KB).
    
    `EC`: Current eden space capacity (KB).
    
    `OGCMN`: Minimum old generation capacity (KB).
    
    `OGCMX`: Maximum old generation capacity (KB).
    
    `OGC`: Current old generation capacity (KB).
    
    `OC`: Current old space capacity (KB).
    
    `MCMN`: Minimum metaspace capacity (KB).
    
    `MCMX`: Maximum metaspace capacity (KB).
    
    `MC`: Metaspace Committed Size (KB).
    
    `CCSMN`: Compressed class space minimum capacity (KB).
    
    `CCSMX`: Compressed class space maximum capacity (KB).
    
    `CCSC`: Compressed class committed size (KB).
    
    `YGC`: Number of young generation GC events.
    
    `FGC`: Number of full GC events.

-gccause option

此选项显示与 -gcutil 选项相同的垃圾回收统计信息摘要,但包括最近一次垃圾回收事件的原因以及(如果适用)当前垃圾回收事件的原因。除了为 -gcutil 列出的列之外,此选项还添加了以下列

    `LGCC`: Cause of last garbage collection
    
    `GCC`: Cause of current garbage collection

-gcnew option

新生代统计信息。

    `S0C`: Current survivor space 0 capacity (KB).
    
    `S1C`: Current survivor space 1 capacity (KB).
    
    `S0U`: Survivor space 0 utilization (KB).
    
    `S1U`: Survivor space 1 utilization (KB).
    
    `TT`: Tenuring threshold.
    
    `MTT`: Maximum tenuring threshold.
    
    `DSS`: Desired survivor size (KB).
    
    `EC`: Current eden space capacity (KB).
    
    `EU`: Eden space utilization (KB).
    
    `YGC`: Number of young generation GC events.
    
    `YGCT`: Young generation garbage collection time.

-gcnewcapacity option

新生代空间大小统计信息。

    `NGCMN`: Minimum new generation capacity (KB).
    
    `NGCMX`: Maximum new generation capacity (KB).
    
    `NGC`: Current new generation capacity (KB).
    
    `S0CMX`: Maximum survivor space 0 capacity (KB).
    
    `S0C`: Current survivor space 0 capacity (KB).
    
    `S1CMX`: Maximum survivor space 1 capacity (KB).
    
    `S1C`: Current survivor space 1 capacity (KB).
    
    `ECMX`: Maximum eden space capacity (KB).
    
    `EC`: Current eden space capacity (KB).
    
    `YGC`: Number of young generation GC events.
    
    `FGC`: Number of full GC events.

-gcold option

老年代大小统计信息。

    `MC`: Metaspace Committed Size (KB).
    
    `MU`: Metaspace utilization (KB).
    
    `CCSC`: Compressed class committed size (KB).
    
    `CCSU`: Compressed class space used (KB).
    
    `OC`: Current old space capacity (KB).
    
    `OU`: Old space utilization (KB).
    
    `YGC`: Number of young generation GC events.
    
    `FGC`: Number of full GC events.
    
    `FGCT`: Full garbage collection time.
    
    `GCT`: Total garbage collection time.

-gcoldcapacity option

老年代统计信息。

    `OGCMN`: Minimum old generation capacity (KB).
    
    `OGCMX`: Maximum old generation capacity (KB).
    
    `OGC`: Current old generation capacity (KB).
    
    `OC`: Current old space capacity (KB).
    
    `YGC`: Number of young generation GC events.
    
    `FGC`: Number of full GC events.
    
    `FGCT`: Full garbage collection time.
    
    `GCT`: Total garbage collection time.

-gcmetacapacity option

元空间大小统计信息。

    `MCMN`: Minimum metaspace capacity (KB).
    
    `MCMX`: Maximum metaspace capacity (KB).
    
    `MC`: Metaspace Committed Size (KB).
    
    `CCSMN`: Compressed class space minimum capacity (KB).
    
    `CCSMX`: Compressed class space maximum capacity (KB).
    
    `YGC`: Number of young generation GC events.
    
    `FGC`: Number of full GC events.
    
    `FGCT`: Full garbage collection time.
    
    `GCT`: Total garbage collection time.

-gcutil option

垃圾回收统计信息摘要。

    `S0`: Survivor space 0 utilization as a percentage of the space's current capacity.
    
    `S1`: Survivor space 1 utilization as a percentage of the space's current capacity.
    
    `E`: Eden space utilization as a percentage of the space's current capacity.
    
    `O`: Old space utilization as a percentage of the space's current capacity.
    
    `M`: Metaspace utilization as a percentage of the space's current capacity.
    
    `CCS`: Compressed class space utilization as a percentage.
    
    `YGC`: Number of young generation GC events.
    
    `YGCT`: Young generation garbage collection time.
    
    `FGC`: Number of full GC events.
    
    `FGCT`: Full garbage collection time.
    
    `GCT`: Total garbage collection time.

-printcompilation option

Java HotSpot VM 编译方法统计信息。

    `Compiled`: Number of compilation tasks performed by the most recently compiled method.
    
    `Size`: Number of bytes of byte code of the most recently compiled method.
    
    `Type`: Compilation type of the most recently compiled method.
    
    `Method`: Class name and method name identifying the most recently compiled method. Class name uses a slash (/) instead of a dot (.) as a name space separator. The method name is the method within the specified class. The format for these two fields is consistent with the HotSpot `-XX:+PrintCompilation` option.

 

虚拟机标识符

vmid 字符串的语法对应于 URI 的语法

[protocol:][//]lvmid[@hostname[:port][/servername]

vmid 字符串的语法对应于 URI 的语法。vmid 字符串可以从表示本地 JVM 的简单整数到指定通信协议、端口号和其他特定于实现的值的更复杂结构不等。

protocol

通信协议。如果省略了 protocol 值并且未指定主机名,则默认协议是特定于平台的优化本地协议。如果省略了 protocol 值并且指定了主机名,则默认协议为 rmi

lvmid

目标 JVM 的本地虚拟机标识符。lvmid 是特定于平台的值,它在系统上唯一标识 JVM。lvmid 是虚拟机标识符中唯一必需的组件。lvmid 通常(但并非总是)是目标 JVM 进程的操作系统的进程标识符。可以使用 jps 命令确定 lvmid,前提是 JVM 进程未在单独的 docker 实例中运行。您还可以使用 ps 命令在 Linux 和 OS X 平台上确定 lvmid,在 Windows 上使用 Windows 任务管理器确定 lvmid

hostname

指示目标主机的主机名或 IP 地址。如果省略了 hostname 值,则目标主机是本地主机。

port

与远程服务器通信的默认端口。如果省略了 hostname 值或 protocol 值指定了优化的本地协议,则忽略 port 值。否则,port 参数的处理方式特定于实现。对于默认的 rmi 协议,端口值指示远程主机上 rmiregistry 的端口号。如果省略了 port 值并且 protocol 值指示 rmi,则使用默认的 rmiregistry 端口 (1099)。

servername

servername 参数的处理方式取决于实现。对于优化的本地协议,此字段将被忽略。对于 rmi 协议,它表示远程主机上 RMI 远程对象的名称。

 

示例

本节提供了一些使用 lvmid 为 21891 监控本地 JVM 的示例。

 

Gcutil 选项

此示例附加到 lvmid 21891 并以 250 毫秒的间隔获取 7 个样本,并显示 -gcutil 选项指定的输出。

此示例的输出显示,在第三个和第四个样本之间发生了一次年轻代收集。收集花费了 0.078 秒,并将对象从伊甸园空间 (E) 提升到老年代空间 (O),导致老年代空间利用率从 66.80% 增加到 68.19%。在收集之前,幸存者空间的利用率为 97.02%,但在这次收集之后,其利用率为 91.03%。

    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

 

重复列标题字符串

此示例附加到 lvmid 21891 并以 250 毫秒的间隔获取样本,并显示 -gcnew 选项指定的输出。此外,它使用 -h3 选项在每 3 行数据之后输出列标题。

除了显示重复的标题字符串之外,此示例还显示,在第二个和第三个样本之间,发生了一次年轻代 GC。其持续时间为 0.001 秒。收集发现足够多的活动数据,以至于幸存者空间 0 利用率 (S0U) 将超过所需的幸存者大小 (DSS)。因此,对象被提升到老年代(在此输出中不可见),并且晋升阈值 (TT) 从 31 降低到 2。

在第五个和第六个样本之间发生另一次收集。这次收集发现幸存者很少,并将晋升阈值恢复到 31。

    jstat -gcnew -h3 21891 250
     S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
      64.0   64.0    0.0   31.7 31  31   32.0    512.0    178.6    249    0.203
      64.0   64.0    0.0   31.7 31  31   32.0    512.0    355.5    249    0.203
      64.0   64.0   35.4    0.0  2  31   32.0    512.0     21.9    250    0.204
     S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
      64.0   64.0   35.4    0.0  2  31   32.0    512.0    245.9    250    0.204
      64.0   64.0   35.4    0.0  2  31   32.0    512.0    421.1    250    0.204
      64.0   64.0    0.0   19.0 31  31   32.0    512.0     84.4    251    0.204
     S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT
      64.0   64.0    0.0   19.0 31  31   32.0    512.0    306.7    251    0.204

 

为每个样本包含时间戳

此示例附加到 lvmid 21891 并以 250 毫秒的间隔获取 3 个样本。-t 选项用于在第一列中为每个样本生成时间戳。

Timestamp 列报告自目标 JVM 启动以来的经过时间(以秒为单位)。此外,-gcoldcapacity 输出显示老年代容量 (OGC) 和老年代空间容量 (OC) 在堆扩展以满足分配或提升需求时增加。老年代容量 (OGC) 在第 81 次完全垃圾回收 (FGC) 之后从 11,696 KB 增加到 13,820 KB。该代(和空间)的最大容量为 60,544 KB (OGCMX),因此它仍然有扩展空间。

    Timestamp      OGCMN    OGCMX     OGC       OC       YGC   FGC    FGCT    GCT
              150.1   1408.0  60544.0  11696.0  11696.0   194    80    2.874   3.799
              150.4   1408.0  60544.0  13820.0  13820.0   194    81    2.938   3.863
              150.7   1408.0  60544.0  13820.0  13820.0   194    81    2.938   3.863

 

监控远程 JVM 的检测

此示例使用 `-gcutil` 选项附加到名为 `remote.domain` 的系统上的 lvmid 40496,并以每秒一次的频率无限期地采集样本。

lvmid 与远程主机的名称组合在一起,构成一个 vmid 为 `[[email protected]](/cdn-cgi/l/email-protection)`。此 vmid 导致使用 `rmi` 协议与远程主机上的默认 `jstatd` 服务器进行通信。`jstatd` 服务器使用 `remote.domain` 上绑定到 `rmiregistry` 命令默认端口(端口 1099)的 `rmiregistry` 命令找到。

jstat -gcutil [email protected] 1000
  ... output omitted

上次更新: 2021 年 9 月 14 日


系列中的上一篇
当前教程
Jstat - 监控您的 JVM 统计信息