Jstat工具的使用
jstat(JVM statistics Monitoring)是用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
jstat位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
命令格式:
jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]
-
generalOption #单个常规命令行选项-help或-options。
-
outputOptions #一个或多个由单个statOption组成的输出选项,以及任何-t,-h和-J选项。
-
vmid #虚拟机标识符,表示目标JVM的字符串。 一般的语法如下:[protocol:][//]lvmid[@hostname[:port]/servername]
-
interval [s|ms] #以指定单位的采样间隔,秒(s)或毫秒(ms)。默认单位是毫秒。必须是正整数。指定时,jstat命令会在每个时间间隔产生输出。
-
count #要显示的样本数量。 默认值是无穷大,这会导致jstat命令显示统计信息,直到目标JVM终止或jstat命令终止。 该值必须是正整数。
-statOption #确定jstat命令显示的统计信息。 以下列出了可用的选项。 使用-options常规选项来显示特定平台安装的选项列表。
-
class #显示有关类加载器行为的统计信息。
-
compiler #显示有关Java HotSpot VM即时编译器行为的统计信息。
-
gc #显示有关垃圾回收堆的行为的统计信息。
-
gccapacity #各个垃圾回收代容量(young,old,perm)和他们相应的空间统计。
-
gccause #垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因。
-
gcnew #显示新生代行为的统计信息。gcnewcapacity #显示有关新生代及其相应空间大小的统计信息。
-
gcold #显示有关老年代和metaspace统计信息的统计信息。
-
gcoldcapacity #年老代行为统计。
-
gcmetacapacity #显示有关元空间大小的统计信息。
-
gcutil #显示关于垃圾收集统计信息的摘要。
-
printcompilation #显示Java HotSpot VM编译方法统计信息。
例如:jstat -gcutil 6483 250 7 #查看pid号是6483并以250毫秒的时间间隔取7个样本,显示输出垃圾收集统计信息

S0:幸存者0空间利用率占空间当前容量的百分比。
S1:幸存者1空间利用率占空间当前容量的百分比。
E: Eden空间利用率占空间当前容量的百分比。
O:旧空间利用率占空间当前容量的百分比。
M:Metaspace利用率占空间当前容量的百分比。
CCS:压缩类空间利用率,以百分比表示。
YGC:年轻一代GC事件的数量。
YGCT:年轻一代的垃圾收集时间(S)。
FGC:完整的GC事件的数量。
FGCT:完整的垃圾收集时间(S)。
GCT:垃圾收集总时间(S)。
jstat -gcnew -h3 836 250 #显示pid 836的250毫秒为时间间隔,每三行输出标题的统计新生代的行为
S0C:当前幸存者空间0容量(kB)。
S1C:当前幸存者空间1容量(kB)。
S0U:幸存者空间0利用率(kB)。
S1U:幸存者空间1利用率(kB)。
TT:任期阀值
MTT:最大任期阀值
DSS:所需的幸存者大小(kB)。
EC:当前eden空间容量(kB)。
EU:Eden空间利用率(kB)。
YGC:年轻一代GC事件的数量。
YGCT:年轻一代的垃圾收集时间(S)。
jstat -gcoldcapacity -t 5856 500 3 #pid 5856的java进程的年老代行为统计,-t是显示时间戳,后面是500毫秒为时间间隔打印3次
OGCMN:最小老年代容量(kB)。#从上图可以看出是85MB
OGCMX:最大老年代容量(kB)。#从上如可以看出最大内存是171MB
OGC:当前的老年代容量(kB)。 #当前老年代是171MB
OC:老年代大小(kB)
YGC:年轻一代GC事件的数量。
FGC:full GC事件的数量。
FGCT:完整的垃圾收集时间(S)。
GCT:垃圾收集总时间(S)。
jstat -class 3313 #输出pid 3313进程的监视类装载、卸载数量、总空间以及耗费的时间

Loaded:加载class的数量
Bytes: class字节大小
Unloaded: 卸载的类数。
Bytes: 卸载的千字节数。
Time: 执行类加载和卸载操作的时间。
jstat -compiler 28677 #输出pid号是28677的JIT编译过的方法数量耗时等

Compiled: 执行的编译任务数。
Failed: 编译任务的失败数量。
Invalid: 无效的编译任务数。
Time: 执行编译任务的时间。
FailedType: 编译最后一次失败编译的类型。
FailedMethod: 上次失败编译的类名称和方法。
jstat -gccapacity 4557 500 2 #显示VM内存中三代(young,old,perm)对象的使用和占用大小

NGCMN : 年轻代(young)中初始化(最小)的大小(KB)
NGCMX : 年轻代(young)的最大容量 (KB)
NGC : 年轻代(young)中当前的容量 (KB)
S0C :年轻代中第一个survivor(幸存区)的容量 (KB)
S1C :年轻代中第二个survivor(幸存区)的容量 (KB)
EC :年轻代中Eden(伊甸园)的容量 (KB)
OGCMN :old代中初始化(最小)的大小 (KB)
OGCMX :old代的最大容量(KB)
OGC :old代当前新生成的容量 (KB)
OC :Old代的容量 (KB)
PGCMN :perm代中初始化(最小)的大小 (KB) ,jdk1.8改为了MCMN
PGCMX :perm代的最大容量 (KB),jdk1.8改为了MCMX
PGC :perm代当前新生成的容量 (KB)
PC :Perm(持久代)的容量 (KB)
YGC :从应用程序启动到采样时年轻代中gc次数
FGC :从应用程序启动到采样时old代(全gc)gc次数
jdk1.8还多了下面一些:
MC:Metaspace空间(KB)
CCSMN: 压缩类空间最小容量(kB)。
CCSMX:压缩类空间最大容量(kB)。
CCSC:压缩类空间容量(kB)。
浙公网安备 33010602011771号