jstat 命令

Name

jstat - 监控 JVM 统计信息

概要

Note: 此命令是实验性的,不受支持。

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 命令终止。该值必须是正整数。

Description

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

jstat 命令支持两种类型的选项,通用选项和输出选项。常规选项使 jstat 命令显示简单的用法和版本信息。输出选项决定了统计输出的内容和格式。

所有选项及其功能都可能在未来的版本中更改或删除。

常规选项

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

-help
显示帮助信息。
-options
显示静态选项列表。参见 jstat命令的输出选项

jstat命令的输出选项

如果不指定通用选项,则可以指定输出选项。输出选项确定 jstat 命令输出的内容和格式,由单个 statOption 以及任何其他输出选项(-h-t-J)组成。 statOption 必须排在第一位。

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

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

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

Note:

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

-statOption

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

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

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

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

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

gccause :显示有关垃圾收集统计信息的摘要(与 -gcutil 相同),以及上次和当前(适用时)垃圾收集事件的原因。

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

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

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

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

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

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

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

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

统计选项和输出

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

-class option

类加载器统计信息。

Loaded:加载的类数。

Bytes:加载的 KB 数。

Unloaded:卸载的类数。

Bytes:卸载的 KB 数。

Time:执行类加载和卸载操作所花费的时间。

-compiler option

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

Compiled:执行的编译任务数。

Failed:编译任务数失败。

Invalid:无效的编译任务数。

Time:执行编译任务所花费的时间。

FailedType:上次编译失败的编译类型。

FailedMethod : 上次编译失败的类名和方法。

-gc option

垃圾收集堆统计信息。

S0C:当前幸存者空间0容量(KB)。

S1C:当前幸存者空间1的容量(KB)。

S0U:幸存者空间 0 利用率 (KB)。

S1U:幸存者空间 1 利用率 (KB)。

EC:当前伊甸园空间容量(KB)。

EU:Eden 空间利用率 (KB)。

OC:当前旧空间容量(KB)。

OU:旧空间利用率 (KB)。

MC:元空间承诺大小 (KB)。

MU:元空间利用率 (KB)。

CCSC:压缩类承诺大小 (KB)。

CCSU:使用的压缩类空间 (KB)。

YGC:新生代垃圾回收 (GC) 事件的数量。

YGCT:新生代垃圾回收时间。

FGC:完整 GC 事件的数量。

FGCT:完整的垃圾收集时间。

GCT:总垃圾收集时间。

-gccapacity option

内存池生成和空间容量。

NGCMN:最小新生代容量(KB)。

NGCMX:最大新生代容量(KB)。

NGC:当前新一代容量(KB)。

S0C:当前幸存者空间0容量(KB)。

S1C:当前幸存者空间1的容量(KB)。

EC:当前伊甸园空间容量(KB)。

OGCMN:最小老年代容量(KB)。

OGCMX:老年代最大容量(KB)。

OGC:当前老年代容量(KB)。

OC:当前旧空间容量(KB)。

MCMN:最小元空间容量 (KB)。

MCMX:最大元空间容量 (KB)。

MC:元空间承诺大小 (KB)。

CCSMN:压缩类空间最小容量(KB)。

CCSMX:压缩类空间最大容量(KB)。

CCSC:压缩类承诺大小 (KB)。

YGC:年轻代 GC 事件的数量。

FGC:完整 GC 事件的数量。

-gccause option

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

LGCC:上次垃圾回收的原因

GCC:当前垃圾收集的原因

-gcnew option

新一代统计数据。

S0C:当前幸存者空间0容量(KB)。

S1C:当前幸存者空间1的容量(KB)。

S0U:幸存者空间 0 利用率 (KB)。

S1U:幸存者空间 1 利用率 (KB)。

TT:任期门槛。

MTT:最大任期阈值。

DSS:所需的幸存者大小 (KB)。

EC:当前伊甸园空间容量(KB)。

EU:Eden 空间利用率 (KB)。

YGC:年轻代 GC 事件的数量。

YGCT:新生代垃圾回收时间。

-gcnewcapacity option

新生代空间大小统计。

NGCMN:最小新生代容量(KB)。

NGCMX:最大新生代容量(KB)。

NGC:当前新一代容量(KB)。

S0CMX : 最大幸存者空间 0 容量 (KB)。

S0C:当前幸存者空间0容量(KB)。

S1CMX:最大幸存者空间1容量(KB)。

S1C:当前幸存者空间1的容量(KB)。

ECMX:最大伊甸园空间容量 (KB)。

EC:当前伊甸园空间容量(KB)。

YGC:年轻代 GC 事件的数量。

FGC:完整 GC 事件的数量。

-gcold option

老年代大小统计。

MC:元空间承诺大小 (KB)。

MU:元空间利用率 (KB)。

CCSC:压缩类承诺大小 (KB)。

CCSU:使用的压缩类空间 (KB)。

OC:当前旧空间容量(KB)。

OU:旧空间利用率 (KB)。

YGC:年轻代 GC 事件的数量。

FGC:完整 GC 事件的数量。

FGCT:完整的垃圾收集时间。

GCT:总垃圾收集时间。

-gcoldcapacity option

老一代统计。

OGCMN:最小老年代容量(KB)。

OGCMX:老年代最大容量(KB)。

OGC:当前老年代容量(KB)。

OC:当前旧空间容量(KB)。

YGC:年轻代 GC 事件的数量。

FGC:完整 GC 事件的数量。

FGCT:完整的垃圾收集时间。

GCT:总垃圾收集时间。

-gcmetacapacity option

元空间大小统计。

MCMN:最小元空间容量 (KB)。

MCMX:最大元空间容量 (KB)。

MC:元空间承诺大小 (KB)。

CCSMN:压缩类空间最小容量(KB)。

CCSMX:压缩类空间最大容量(KB)。

YGC:年轻代 GC 事件的数量。

FGC:完整 GC 事件的数量。

FGCT:完整的垃圾收集时间。

GCT:总垃圾收集时间。

-gcutil option

垃圾收集统计摘要。

S0:幸存者空间 0 利用率占空间当前容量的百分比。

S1:幸存者空间 1 利用率占空间当前容量的百分比。

E:Eden 空间利用率占空间当前容量的百分比。

O:旧空间利用率占空间当前容量的百分比。

M:元空间利用率占空间当前容量的百分比。

CCS:压缩类空间利用率百分比。

YGC:年轻代 GC 事件的数量。

YGCT:新生代垃圾回收时间。

FGC:完整 GC 事件的数量。

FGCT:完整的垃圾收集时间。

GCT:总垃圾收集时间。

-printcompilation option

Java HotSpot VM 编译器方法统计。

Compiled:最近编译的方法执行的编译任务数。

Size:最近编译的方法的字节码字节数。

Type:最近编译的方法的编译类型。

Method:标识最近编译的方法的类名和方法名。类名使用斜杠 (/) 而不是点 (.) 作为名称空间分隔符。方法名称是指定类中的方法。这两个字段的格式与 HotSpot -XX:+PrintCompilation 选项一致。

虚拟机标识符

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

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

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

protocol
通信协议。如果省略 protocol 值且未指定主机名,则默认协议是特定于平台的优化本地协议。如果省略 protocol 值并指定主机名,则默认协议为 rmi
lvmid
目标 JVM 的本地虚拟机标识符。 lvmid 是特定于平台的值,可唯一标识系统上的 JVM。 lvmid 是虚拟机标识符的唯一必需组件。 lvmid 通常但不一定是目标 JVM 进程的操作系统进程标识符。如果 JVM 进程未在单独的 docker 实例中运行,您可以使用 jps 命令确定 lvmid。您还可以在 Linux 和 OS X 平台上使用 ps 命令确定 lvmid,在 Windows 上使用 Windows 任务管理器确定。
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)。结果,对象被提升到老年代(在这个输出中不可见),并且 tenuring threshold (TT) 从 31 降低到 2。

另一个收集发生在第五个和第六个样本之间。这个集合发现很少的幸存者,并将 tenuring 阈值恢复到 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) 随着堆扩展以满足分配或升级需求而增加。在第 80 次完整垃圾回收 (FGC) 之后,老年代容量 (OGC) 从 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 与远程主机的名称相结合,构成 40496@remote.domain 的 vmid。此 vmid 导致使用 rmi 协议与远程主机上的默认 jstatd 服务通信。 jstatd 服务使用 remote.domain 上的 rmiregistry 命令定位,该命令绑定到 rmiregistry 命令的默认端口(端口 1099)。

jstat -gcutil 40496@remote.domain 1000
... output omitted