java命令行工具-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工具用于显示一个HotSpot Java虚拟机(JVM)的性能统计信息。通过下面描述的虚拟机标识符或vmid选项来标识目标JVM。

虚拟机标识符

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被省略,并且protocol为rmi,那么将使用默认的rmiregistry端口(1099)。servername该参数的处理取决于具体实现。对于优化的本地协议而言,该字段将会忽略。对于rmi协议而言,它代表远程主机上RMI远程对象的名称。

选项

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

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

1,常规选项 statOption

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

-help显示帮助信息。

-version显示版本信息。

-options显示统计选项列表。

2,输出选项 

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

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

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

分别使用interval和count参数来确定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。

statOption和输出

下列表格概括了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为1928的本地JVM的几个示例。

使用gcutil选项

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

jstat -gcutil 1928 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 1928,每过250毫秒获取一次样本,并指定-gcutil选项来显示输出。此外,它使用-h3选项来实现每显示3行数据之后输出一次列标题。

jstat -gcnew -h3 1928 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 1928,并且每过250毫秒就提取3个样本。选项-t用来为每个样本在第一列生成一个时间戳。

jstat -gcoldcapacity -t 1928 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 13830,使用-gcutil选项,并且无限期地每秒获取一次样本。

jstat -gcutil [email protected] 1000

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

 

猜你喜欢

转载自blog.csdn.net/casepk/article/details/82502005