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