软件指南针:专注于软件传播与分享

JDK工具jstat用法详解

来源:原创 1751次浏览 0条评论
☞ 本文主要介绍软件Java的相关内容:JDK工具jstat用法详解

   其下列版本/分支可以参考本文:

  • 全部版本/分支

jstat,是Java虚拟机的统计监测工具,主要用于显示JVM的性能统计性能。

用法摘要

jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption
单个常规的命令行选项(-help-options,或-version)。
outputOptions
一个或多个输出选项,由一个statOption加上任意的-t-h-J选项。
vmid

虚拟机标识符,一个表示目标JVM的字符串。常规语法是:

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

vmid字符串的语法与URI的语法基本保持一致。vmid可以是一个代表本地JVM的简单整数,也可以是一个指定了通讯协议、端口号以及其他特定实现的值的复杂结构。请查看虚拟机标识符了解更多细节。

interval[s|ms]
指定单位(秒/s或毫秒/ms)的采样时间间隔,必须是一个正整数。默认单位为毫秒。如果指定了该选项参数,每过指定的间隔时间,jstat就会产生一次输出。
count
显示的样本数,必须是一个正整数。默认值为无限大;也就是说,jstat将会一直显示统计信息,直到目标JVM终止或者jstat命令被终止。

描述

jstat工具用于显示一个HotSpot Java虚拟机(JVM)的性能统计信息。通过下面描述的虚拟机标识符或vmid选项来标识目标JVM。

注意:此工具是不受支持的,并且无法确定在未来版本的J2SE JDK中是否可用。此工具目前不适用于Windows 98和Windows ME平台。

虚拟机标识符

vmid字符串的语法与URI的语法基本保持一致:

[protocol:][//]lvmid[@hostname][:port][/servername]
protocol
通讯协议。如果protocol被省略并且未指定主机名,则默认协议是一个特定于平台的优化的本地协议。如果protocol被省略并指定了主机名,则默认协议为rmi
lvmid
目标JVM的本地虚拟机标识符。lvmid是一个特定平台的值,并在系统上唯一地标识一个JVM。lvmid是虚拟机标识符唯一的必需组件。lvmid通常是(但并不一定是)目标JVM进程在该操作系统上的进程标识符。你可以使用jps命令来确定lvmid。另外,在Unix平台上你可以使用ps命令来确定lvmid,在Windows平台上,你可以使用Windows任务管理器来确定lvmid。
hostname
表示目标主机的主机名或IP地址。如果hostname被省略,则默认目标主机为本地主机。
port
与远程服务器通讯的默认端口号。如果hostname被省略,或者protocol指定了一个优化的本地协议,那么port将被忽略。否则,端口参数的处理是一个特定的实现。对于默认的rmi协议来说,port表示远程主机上rmiregistry的端口号。如果port被省略,并且protocolrmi,那么将使用默认的rmiregistry端口(1099)。
servername
该参数的处理取决于具体实现。对于优化的本地协议而言,该字段将会忽略。对于rmi协议而言,它代表远程主机上RMI远程对象的名称。

选项

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

注意:所有的选项,以及它们的功能作用可能会在未来的版本中变更或移除。

常规选项

如果你指定了一个常规选项,你就不能再指定其他的选项或参数。

-help
显示帮助信息。
-version
显示版本信息。
-options
显示统计选项列表。查看下面的输出选项部分。

输出选项

如果你没有指定常规选项,那么你可以指定输出选项。输出选项用于确定jstat输出的内容和格式,它由一个statOption选项,加上任意的其他输出选项(-h-t,和-J)组成。statOption必须在第一位置。

输出将被格式化为一个表格,其中的列以空白隔开。头部行拥有标题和描述列。使用-h选项来设置表格头的显示频率。不同选项之间的列标题名称通常是一直的。一般情况下,如果两个选项提供了同一名称的列,那么两个列的数据源是相同的。

使用-t选项来显示一个时间戳列,该列将会是输出的第一个列,标题为TimestampTimestamp列包含从目标JVM启动开始计算的已过去的时间,单位为秒。时间戳的精确度取决于多种因素,变化主要取决于高负载系统上的线程调度延迟。

分别使用intervalcount参数来确定jstat显示输出的频率和次数。

注意:由于在未来版本中输出格式可能变更,因此不建议编写脚本来解析jstat输出。如果你选择编写解析jstat输出的脚本,可能需要针对此工具的未来版本修改这些脚本。
-statOption
确定jstat显示的统计信息。下表列出了可用的选项。使用常规选项-options可以显示特定平台安装的选项列表。
选项 显示...
class 类加载器的行为统计
compiler HotSpot即时编译器的行为统计
gc 堆的垃圾回收器的行为统计
gccapacity Java各代区域以及对应空间的容量统计
gccause 垃圾回收的摘要信息(等同于-gcutil), 以及最后的和当前的(如适用)垃圾回收事件的原因。
gcnew new generation的行为统计
gcnewcapacity new generation及其对应空间的大小统计。
gcold old和permanent generation的行为统计。
gcoldcapacity old generation的大小统计。
gcpermcapacity permanent generation的大小统计。
gcutil 垃圾回收统计的摘要信息。
printcompilation HotSpot汇编方法统计。
-h n
每过n个样例(输出行)就显示一个列头,n为一个正整数。默认值为0,即只在数据的第一行上面显示列头。
-t n
显示时间戳列,并作为输出的第一个列。该时间戳表示目标JVM启动时间到当前时间的间隔时间。
-JjavaOption
传递javaOption到java应用启动程序。例如:-J-Xms48m设置启动内存为48MB。想要了解完整的选项列表,请参考下列文档:

STATOPTIONS和输出

下列表格概括了jstat为每个statOption输出的列。

-class选项

类加载器的统计信息
描述
Loaded 加载的类的数量
Bytes 加载的Kbyte数
Unloaded 已卸载的类的数量
Bytes 已卸载的Kbyte数
Time 执行类的加载和卸载操作所耗费的时间

-compiler选项

HotSpot即时(Just-In-Time)编译器的统计信息
描述
Compiled 已执行的编译任务数
Failed 失败的编译任务数
Invalid 无效的编译任务数
Time 执行编译任务所耗费的时间
FailedType 最后失败的编译的编译类型
FailedMethod 最后失败的编译的类名和方法

-gc选项

垃圾回收堆的统计信息
描述
S0C survivor space 0的当前容量(KB).
S1C survivor space 1的当前容量(KB).
S0U survivor space 0使用的容量(KB).
S1U survivor space 1使用的容量(KB).
EC Eden space的当前容量(KB).
EU Edenspace的已用容量(KB).
OC Oldspace的当前容量(KB).
OU Old space的已用容量(KB).
PC Permanent space的当前容量(KB).
PU Permanentspace的已用容量(KB).
YGC Younggeneration的GC事件数量
YGCT Younggeneration的垃圾回收事件
FGC Full GC事件的数量
FGCT Full GC的时间
GCT 总计的垃圾回收时间

-gccapacity选项

内存池的分代和空间容量Memory Pool Generation and Space Capacities
Column Description
NGCMN newgeneration的最小容量(KB).
NGCMX newgeneration的最大容量(KB).
NGC newgeneration的当前容量(KB).
S0C survivor space 0的当前容量(KB).
S1C survivor space 1的当前容量(KB).
EC Eden space的当前容量(KB).
OGCMN Old generation的最小容量(KB).
OGCMX Oldgeneration的最大容量(KB).
OGC Oldgeneration的当前容量(KB).
OC Old space的当前容量(KB).
PGCMN Permanentgeneration的最小容量(KB).
PGCMX Permanentgeneration的最大容量(KB).
PGC Permanentgeneration的当前容量(KB).
PC Permanent space的当前容量(KB).
YGC Younggeneration的GC事件数
FGC Full GC事件的数量

-gccause选项

此选项显示与-gcutil选项相同的垃圾回收统计摘要信息,但却包括最后的和当前的(如适用)垃圾回收事件的原因。除了-gcutil列出的列,此选项还添加了以下列:

垃圾回收统计,包括GC事件
描述
LGCC 最后的垃圾回收的原因
GCC 当前的垃圾回收的原因

-gcnew选项

新生代(New)的统计信息
描述
S0C survivor space 0的当前容量(KB).
S1C survivor space 1的当前容量(KB).
S0U survivor space 0的已用容量(KB).
S1U survivor space 1的已用容量(KB).
TT 期限阈值
MTT 最大的期限阈值
DSS 所需的幸存者(survivor)大小(KB).
EC Eden space的当前容量(KB).
EU Eden space的已用容量(KB).
YGC Young generation的GC事件数
YGCT Young generation的垃圾回收时间

-gcnewcapacity选项

新生代(new)的空间大小统计
描述
NGCMN           
new generation的最小容量(KB). 
NGCMX     new generation的最大容量(KB).
NGC     new generation的当前容量(KB).
S0CMX survivor space 0的最大容量(KB).
S0C survivor space 0的当前容量(KB).
S1CMX survivor space 1的最大容量(KB).
S1C survivor space 1的当前容量(KB).
ECMX Eden space的最小容量(KB).
EC Eden space的当前容量(KB).
YGC Young generation的GC事件数
FGC Full GC事件的数量

-gcold选项

Old和Permanent Generation的统计信息
描述
PC permanent space的当前容量(KB).
PU Permanent space的已用容量(KB).
OC old space的当前容量(KB).
OU old space的已用容量(KB).
YGC young generation的GC事件数
FGC Full GC事件的数量
FGCT Full GC的时间
GCT 总计的垃圾回收时间

-gcoldcapacity选项

Old Generation的统计信息
描述
OGCMN old generation的最小容量(KB).
OGCMX old generation的最大容量(KB).
OGC old generation的当前容量(KB).
OC old space的当前容量(KB).
YGC young generation的GC事件数
FGC Full GC事件的数量
FGCT Full GC的时间
GCT 总计的垃圾回收时间

-gcpermcapacity选项

Permanent Generation的统计信息
描述
PGCMN permanent generation的最小容量(KB).
PGCMX permanent generation的最大容量(KB).
PGC permanent generation的当前容量(KB).
PC permanent space的当前容量(KB).
YGC young generation的GC事件数
FGC Full GC 事件的数量
FGCT Full  GC的时间
GCT 总计的垃圾回收时间

-gcutil选项

垃圾回收统计的摘要信息
描述
S0 Survivor space 0已用容量占当前容量的百分比
S1 Survivor space 1已用容量占当前容量的百分比
E Eden space已用容量占当前容量的百分比
O Old space已用容量占当前容量的百分比
P Permanent space已用容量占当前容量的百分比
YGC young generation的GC事件数
YGCT Young generation的垃圾回收时间
FGC Full GC 事件的数量
FGCT Full GC的时间
GCT 总计的垃圾回收时间

-printcompilation选项

HotSpot编译器方法统计
描述
Compiled 已执行的编译任务数
Size 方法字节码的字节数
Type 编译类型
Method 表示被编译方法的类名和方法名。类名使用"/"替代"."作为命名空间的分隔符。方法名是给定的类的方法。这两个字段的格式与HotSpot选项- XX:+PrintComplation是一致的。

示例

本节介绍监控lvmid为21891的本地JVM的几个示例。

使用gcutil选项

本示例附于lvmid 21891,每过250毫秒获取7个样本,并指定-gcutil选项来显示输出。

jstat -gcutil 21891 250 7
  S0     S1     E      O      P     YGC    YGCT    FGC    FGCT     GCT
 12.44   0.00  27.20   9.49  96.70    78    0.176     5    0.495    0.672
 12.44   0.00  62.16   9.49  96.70    78    0.176     5    0.495    0.672
 12.44   0.00  83.97   9.49  96.70    78    0.176     5    0.495    0.672
  0.00   7.74   0.00   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  23.37   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  43.82   9.51  96.70    79    0.177     5    0.495    0.673
  0.00   7.74  58.11   9.51  96.71    79    0.177     5    0.495    0.673

该示例的输出表明,第3和第4个样本之间发生了一个young generation的垃圾回收。此次回收耗费0.001秒,并将eden space(E)的对象推进到old space(O),结果使得old space的已用容量从9.49%增加到9.51%。在回收之前,survivor space使用了12.44%,但在回收之后,仅使用了7.74%。

重复列的标题字符串

本示例附于lvmid 21891,每过250毫秒获取一次样本,并指定-gcutil选项来显示输出。此外,它使用-h3选项来实现每显示3行数据之后输出一次列标题。

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
除了显示重复的标题字符串,此示例还显示,在第2和第3个样本之间,发生了一次young GC。它耗费了0.001秒。此次回收发现了足够多的活跃数据,survivor space 0的使用空间(S0U)已经超过所需的survivor大小(DSS)。结果,对象被推进old generation(本次输出中不可见),期限阈值(TT)从31降到2。

第5和第6个样本之间发生了另一次垃圾回收。此次回收只发现了少许的survivor,期限阈值又返回到了31。

每个样本包含一个时间戳

本示例附于lvmid 21891,并且每过250毫秒就提取3个样本。选项-t用来为每个样本在第一列生成一个时间戳。

jstat -gcoldcapacity -t 21891 250 3
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
Timestamp列报告了自目标虚拟机启动以后所消逝的时间,单位是秒。此外, 选项-gcoldcapacity显示,为了满足分配或提升的需求,old generation的容量(OGC)和old space的容量(OC)随着堆的扩张而增加。在第81次Full GC(FGC)之后,old generation的容量(OGC)从11696KB增长到13820KB。generation(和space)的最大容量为60544KB(OGCMX),因此它仍然有扩张的空间。

监控远程JVM

本示例附于名为remote.domain的系统的lvmid 40496,使用-gcutil选项,并且无限期地每秒获取一次样本。

jstat -gcutil 40496@remote.domain 1000
...省略输出
lvmid与远程主机的名称结合,构成了一个lvmid -- 40496@remote.domain。该vmid导致使用rmi协议来与远程主机的默认jstatd服务器进行通讯。jstatd服务器位于remote.domain之上,并使用绑定默认rmiregistry端口号(1099)的rmiregistry

作者:软件指南针(http://www.softown.cn),转载请保留出处!

用户评论

使用指南 故障排除 0 返回顶部