ORACLE Help Center JDK10版本中的jstat技术翻译。
本文所在章节:【ORACLE Help Center】→【Java】→【JDK10】→【监视工具和命令】→【jstat】
注意:jstat
命令监视JVM统计信息。此命令是实验性的,不受支持。
概要
jstat generalOptions
generalOptions:单个通用命令行选项,包括-help(显示帮助消息)和-options(显示静态选项列表,同命令输出选项)。
jstat - outputOptions [-t] [-h lines ] vmid [ interval [ count ]]
generalOptions中的选项,一个或由单个的多输出选项,加上任何的-t,-h和-J选项。
-t:显示时间戳列作为输出的第一列。时间戳是从目标JVM的开始时间开始的时间。
-h n:每个n样本(输出行)显示一个列标题,其中n是一个正整数。默认值为0,显示第一行数据的列标题。
vmid:虚拟机标识符,是指示目标JVM的字符串。
interval:采用间隔,以指定单位,秒(s)或者毫秒(ms)为单位。默认单位是毫秒。这必须是正整数。指定时,jstat命令会在每个间隔生成其输出。
count:要现实的样本数。默认为infinity,这会导致命令显示统计信息,指导目标JVM种植或者jstat命令终止。该值必须为正整数。
jstat命令的输出选项
如果没有指令常规选项,则可以指令输出选项。输出选项确定的内容和格式jstat命令的输出,并且由单个的statOption,加上任何的另一个输出选项(-h,-t,和-J)。
输出格式为表格,列由空格分隔。带标题的标题行描述列。使用-h选项设置标题显示的频率。列标题名称在不同选项中是一致的。
使用该-t
选项可显示时间戳列,标记为Timestamp作为输出的第一列。Timestamp列包含自目标JVM启动以来经过的时间(以秒为单位)。时间戳的分辨率取决于各种因素,并且由于在高负载系统上延迟的线程调度而受到变化。
使用interval和count参数分别确定jstat
命令显示其输出的频率和次数。
- -statOption:确定jstat命令显示的统计信息。以下列出了可用选项。
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
选项是特定于Java HotSpot虚拟机的通用选项。
-Xbatch
禁用后台编译。默认情况下,JVM将该方法编译为后台任务,以解释器模式运行该方法,直到后台编译完成。该-Xbatch
标志禁用后台编译,以便所有方法的编译作为前台任务继续进行,直到完成。此选项相当于-XX:-BackgroundCompilation
。
-Xbootclasspath/a:directories| zip|JAR files
指定要附加到默认引导程序类路径末尾的目录,JAR文件和ZIP存档的列表。
-Xcheck:jni
对Java Native Interface(JNI)函数执行其他检查。具体来说,它在处理JNI请求之前验证传递给JNI函数的参数和运行时环境数据。它还检查JNI调用之间的挂起异常。遇到的任何无效数据都表明本机代码存在问题,在这种情况下,JVM会以不可恢复的错误终止。使用此选项时,预计性能会下降。注:以下所有的演示都是基于Windows10命令行平台。
-Xcomp
在第一次调用时强制编译方法。默认情况下,客户端VM(-client
)执行1,000个已解释的方法调用,而服务器VM(-server
)执行10,000个已解释的方法调用以收集有效编译的信息。指定该-Xcomp
选项会禁用已解释的方法调用,从而以牺牲效率为代价来提高编译性能。您还可以使用该-XX:CompileThreshold
选项在编译之前更改已解释的方法调用的数量。
-Xdebug
什么也没做。提供向后兼容性。
-Xdiag
显示其他诊断消息。
-Xfuture
启用严格的类文件格式检查,以强制与类文件格式规范紧密一致。开发人员在开发新代码时应使用此标志。更严格的检查可能会成为未来版本的默认检查。
以仅解释模式运行应用程序。禁用对本机代码的编译,并且解释器执行所有字节码。实时(JIT)编译器提供的性能优势在此模式下不存在。
显示比-version
选项更详细的JVM版本信息,然后退出。
-Xloggc:option
启用JVM统一日志记录框架。将GC状态记录到带有时间戳的文件中。
使用Java虚拟机(JVM)统一日志记录框架配置或启用日志记录。
-Xmixed
除了热方法之外,解释器执行所有字节码,热方法被编译为本机代码。
设置年轻代(托儿所)的堆的初始和最大大小(以字节为单位)。附加字母k
或K
表示千字节,m
或M
表示兆字节,g
或G
表示千兆字节。堆的年轻代区域用于新对象。GC在该区域比在其他区域更频繁地进行。如果年轻一代的规模太小,那么就会进行大量的小型垃圾收集。如果大小太大,则只执行完整的垃圾收集,这可能需要很长时间才能完成。Oracle建议您保持年轻代的大小大于25%且小于整个堆大小的50%。以下示例显示如何使用各种单位将年轻代的初始和最大大小设置为256 MB:
统计选项和输出
- -class option:类加载器统计信息
Loaded:加载的类数。
Bytes:已加载的KB数。
Unloaded:卸载的类数。
Times:执行类加载和卸载操作所花费的时间。
- -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:伊甸园空间利用率(KB)。
OC:当前旧空间容量(KB)。
OU:旧空间利用率(KB)。
MC:Metaspace承诺大小(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:Metaspace承诺大小(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:伊甸园空间利用率(KB)。
YGC:年轻一代GC事件的数量。
YGCT:年轻一代垃圾收集时间。
此示例附加到lvmid 43476并以1000毫秒的间隔采样,并按-gcnew
选项指定显示输出。此外,它使用-h3
选项在每3行数据后输出列标题。
除了显示重复的标题字符串之外,此示例还显示在第1个和第2个样本之间发生了一个年轻的GC。它的持续时间是0.007秒。幸存者空间0利用率(S0U)将超过所需的幸存者大小(DSS)。结果,对象被提升到旧一代(在此输出中不可见),并且终点阈值(TT)从6降低到3。
- 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:Metaspace承诺大小(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)。
YGC:年轻一代GC事件的数量。
FGC:完整GC事件的数量。
FGCT:完全GC事件的数量。
GCT:垃圾回收总时间。
- -gcmetacapacity option:元空间大小统计。
MCMN:最小元空间容量(KB)。
MCMX:最大元空间容量(KB)。
MC:Metaspace承诺大小(KB)。
CCSMN:压缩类空间最小容量(KB)。
CCSMX:压缩类空间最大容量(KB)。
YGC:年轻一代GC事件的数量。
FGC:完整GC事件的数量。
FGCT:完全垃圾收集时间。
GCT:垃圾收集总时间。
- -gcutil option:垃圾收集统计摘要。
S0:幸存者空间0利用率占空间当前容量的百分比。
S1:幸存者空间1占空间当前容量的百分比。
E:伊甸园空间利用率占空间当前容量的百分比。
O:旧空间利用率占空间当前容量的百分比。
M:元空间利用率占空间当前容量的百分比。
CCS:压缩的类空间利用率百分比。
YGC:年轻一代GC事件的数量。
YGCT:年轻一代垃圾收集时间。
FGC:完整GC事件的数量。
FGCT:完全垃圾收集时间。
GCT:垃圾收集总时间。
示例分析:
通过vmid 43476并且用1000ms间隔获取7个样本,用-gcutil来显示。输出的第3和第4个样本之间发生了年轻代收集。耗时0.008s,将数据从伊甸园区域被清除,进行了一次minor GC,一部分到幸存者空间1,从而导致元空间利用率增加0.02,同时幸存者空间利用率从64.49%上升到74.12%,垃圾回收总时间增加0.008s。
虚拟机标识符
本地虚拟机标识符Lvmid,是特定于平台的值,用于唯一标识系统上的JVM。lvmid是一个虚拟机标识符唯一必需的组件。如果是远程虚拟机的进程,那么VMID格式为:
[protocol:] [//]lvmid[@hostname[:port]/servername]
protocol:通信协议。如果protocol
省略该值并且未指定主机名,则默认协议是特定于平台的优化本地协议。如果protocol
省略该值并指定了主机名,则默认协议为rmi。
hostname:指示目标主机的主机名或IP地址。如果hostname
省略该值,则目标主机是本地主机。
port:用于与远程服务器通信的默认端口。如果hostname
省略该protocol
值或该值指定优化的本地协议,则port
忽略该值。否则,port
参数的处理是特定于实现的。对于默认rmi
协议,端口值指示rmiregistry
远程主机上的端口号。如果port
省略该protocol
值并且值指示rmi
,则使用默认的rmiregistry端口(1099)。
servername
参数的处理取决于实施。对于优化的本地协议,将忽略此字段。对于rmi
协议,它表示远程主机上的RMI远程对象的名称。
提示:找到本地LVMID方式:
1.在本地目录C:\Users\(用户名)\AppData\Local\Temp\hsperfdata_(用户名)下可以找到运行的Java程序的LVMID。
2.在Windows操作命令行中执行jps -l。