JVM调优命令jstat——技术文档翻译和实操演示

版权声明:本文为博主原创作品,未经博主允许,不得转载。如有问题,欢迎指正。 https://blog.csdn.net/qq_21306815/article/details/88942312

                                               

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

启用严格的类文件格式检查,以强制与类文件格式规范紧密一致。开发人员在开发新代码时应使用此标志。更严格的检查可能会成为未来版本的默认检查。

-Xint

以仅解释模式运行应用程序。禁用对本机代码的编译,并且解释器执行所有字节码。实时(JIT)编译器提供的性能优势在此模式下不存在。

-Xinternalversion

显示比-version选项更详细的JVM版本信息,然后退出。

-Xloggc:option

启用JVM统一日志记录框架。将GC状态记录到带有时间戳的文件中。

-Xlog:option

使用Java虚拟机(JVM)统一日志记录框架配置或启用日志记录。

-Xmixed

除了热方法之外,解释器执行所有字节码,热方法被编译为本机代码。

-Xmn size

设置年轻代(托儿所)的堆的初始和最大大小(以字节为单位)。附加字母kK表示千字节,mM表示兆字节,gG表示千兆字节。堆的年轻代区域用于新对象。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。

猜你喜欢

转载自blog.csdn.net/qq_21306815/article/details/88942312