运维猫

jvm统计信息监控工具

2019-07-17  本文已影响0人  运维猫
jstat

​一、 jstat是什么

jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。

jstat 是用于见识虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、jit编译等运行数据,它是线上定位jvm性能的首选工具。

二、 jstat命令格式

[root@localhost ~]# jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]

generalOption : 单个的常用的命令行选项,如-help, -options, 或 -version。

outputOptions : 一个或多个输出选项,由单个的statOption选项组成,可以和-t, -h, and -J等选项配合使用。

Usage: jstat -help|-options

       jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:

  <option>      An option reported by the -options option

  <vmid>        Virtual Machine Identifier. A vmid takes the following form:

                     <lvmid>[@<hostname>[:<port>]]

                Where <lvmid> is the local vm identifier for the target

                Java virtual machine, typically a process id; <hostname> is

                the name of the host running the target Java virtual machine;

                and <port> is the port number for the rmiregistry on the

                target host. See the jvmstat documentation for a more complete

                description of the Virtual Machine Identifier.

  <lines>       Number of samples between header lines.

  <interval>    Sampling interval. The following forms are allowed:

                    <n>["ms"|"s"]

                Where <n> is an integer and the suffix specifies the units as 

                milliseconds("ms") or seconds("s"). The default units are "ms".

  <count>       Number of samples to take before terminating.

  -J<flag>      Pass <flag> directly to the runtime system.

# option:参数选项

# -t:可以在打印的列加上Timestamp列,用于显示系统运行的时间

# -h:可以在周期性数据数据的时候,可以在指定输出多少行以后输出一次表头

# vmid:Virtual Machine ID( 进程的 pid)

# interval:执行每次的间隔时间,单位为毫秒

# count:用于指定输出多少次记录,缺省则会一直打印

三、jstat参数选项

[root@localhost ~]# jstat -options

-class 显示ClassLoad的相关信息;

-compiler 显示JIT编译的相关信息;

-gc 显示和gc相关的堆信息;

-gccapacity    显示各个代的容量以及使用情况;

-gcmetacapacity 显示metaspace的大小

-gcnew 显示新生代信息;

-gcnewcapacity 显示新生代大小和使用情况;

-gcold 显示老年代和永久代的信息;

-gcoldcapacity 显示老年代的大小;

-gcutil   显示垃圾收集信息;

-gccause 显示垃圾回收的相关信息(通-gcutil),同时显示最后一次或当前正在发生的垃圾回收的诱因;

-printcompilation 输出JIT编译的方法信息

参数名称 | 参数说明

---|---|---

class | 用于查看类加载情况的统计,显示加载class的数量,及所占空间等信息。

compiler | 查看HotSpot中即时编译器编译情况的统计

gc | 查看JVM中堆的垃圾收集情况的统计,可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。

gccapacity | 查看新生代、老生代及持久代的存储容量情况,可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

gccause | 查看垃圾收集的统计情况(这个和-gcutil选项一样),如果有发生垃圾收集,它还会显示最后一次及当前正在发生垃圾收集的原因

gcmetacapacity | 显示关于metaspace大小的统计信息。

gcnew | 查看新生代垃圾收集的情况,new对象的信息

gcnewcapacity | 用于查看新生代的存储容量情况,new对象的信息及其占用量

gcold | 用于查看老生代及持久代发生GC的情况,old对象的信息

gcoldcapacity | 用于查看老生代的容量,old对象的信息及其占用量

gcpermcapacity | 用于查看持久代的容量,perm对象的信息及其占用量

gcutil | 查看新生代、老生代及持代垃圾收集的情况

printcompilation | 当前VM执行的信息

四、 参数使用实例

# 在屏幕打印出一次结果

[root@localhost ~]# jstat -gccause pid

# 不断的在屏幕打印出结果

[root@localhost ~]# jstat -gccause pid 1每格1毫秒输出结果

[root@localhost ~]# jstat -gccause pid 2000每格2秒输出结果

类加载统计 class

[root@localhost ~]# jstat -class 17248 

Loaded  Bytes  Unloaded  Bytes     Time   

  3356  7443.8        0     0.0       2.20

Loaded:加载class的数量

Bytes:所占用空间大小

Unloaded:未加载数量

Bytes:未加载占用空间

Time:时间

编译统计 compiler

[root@localhost ~]# jstat -compiler 17248

Compiled Failed Invalid   Time   FailedType FailedMethod

    2638      0       0     8.59          0  

Compiled:编译数量

Failed:失败数量

Invalid:不可用数量

Time:时间

FailedType:失败类型

FailedMethod:失败的方法

编译统计 compiler

垃圾回收统计 gc

[root@localhost ~]# jstat -gc 17248

 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   

12800.0 2560.0  0.0   2410.5 74240.0  53184.1   59392.0    13256.4   25088.0 24534.7 2560.0 2366.7      7    0.190   1      0.070    0.260

S0C:第一个幸存区的大小

S1C:第二个幸存区的大小

S0U:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

OC:老年代大小

OU:老年代使用大小

MC:方法区大小

MU:方法区使用大小

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

堆内存统计 gccapacity

[root@localhost ~]# jstat -gccapacity 17248

 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 

 52224.0 839680.0 165376.0 12800.0 2560.0  74240.0   105472.0  1679360.0    59392.0    59392.0      0.0 1071104.0  25088.0      0.0 1048576.0   2560.0      7     1

NGCMN:新生代最小容量

NGCMX:新生代最大容量

NGC:当前新生代容量

S0C:第一个幸存区大小

S1C:第二个幸存区的大小

EC:伊甸园区的大小

OGCMN:老年代最小容量

OGCMX:老年代最大容量

OGC:当前老年代大小

OC:当前老年代大小

MCMN:最小元数据容量

MCMX:最大元数据容量

MC:当前元数据空间大小

CCSMN:最小压缩类空间大小

CCSMX:最大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:年轻代gc次数

FGC:老年代GC次数

新生代垃圾回收统计 gcnew

[root@localhost ~]# jstat -gcnew 17248

 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  

12800.0 2560.0    0.0 2410.5  4  15 12800.0  74240.0  56469.6      7    0.190

S0C:第一个幸存区大小

S1C:第二个幸存区的大小

S0U:第一个幸存区的使用大小

S1U:第二个幸存区的使用大小

TT:对象在新生代存活的次数

MTT:对象在新生代存活的最大次数

DSS:期望的幸存区大小

EC:伊甸园区的大小

EU:伊甸园区的使用大小

YGC:年轻代垃圾回收次数

YGCT:年轻代垃圾回收消耗时间

新生代内存统计 gcnewcapacity

[root@localhost ~]#  jstat -gcnewcapacity 17248

  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC 

   52224.0   839680.0   165376.0 279552.0  12800.0 279552.0   2560.0   838656.0    74240.0     7     1

NGCMN:新生代最小容量

NGCMX:新生代最大容量

NGC:当前新生代容量

S0CMX:最大幸存1区大小

S0C:当前幸存1区大小

S1CMX:最大幸存2区大小

S1C:当前幸存2区大小

ECMX:最大伊甸园区大小

EC:当前伊甸园区大小

YGC:年轻代垃圾回收次数

FGC:老年代回收次数

老年代垃圾回收统计 gcold

[root@localhost ~]# jstat -gcold 17248

   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT   

 25088.0  24534.7   2560.0   2366.7     59392.0     13256.4      7     1    0.070    0.260

MC:方法区大小

MU:方法区使用大小

CCSC:压缩类空间大小

CCSU:压缩类空间使用大小

OC:老年代大小

OU:老年代使用大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

老年代内存统计

[root@localhost ~]# jstat -gcoldcapacity  17248

   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   

   105472.0   1679360.0     59392.0     59392.0     7     1    0.070    0.260

OGCMN:老年代最小容量

OGCMX:老年代最大容量

OGC:当前老年代大小

OC:老年代大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

元数据空间统计 gcmetacapacity

[root@localhost ~]# jstat -gcmetacapacity 17248

   MCMN       MCMX        MC       CCSMN      CCSMX       CCSC     YGC   FGC    FGCT     GCT   

       0.0  1071104.0    25088.0        0.0  1048576.0     2560.0     7     1    0.070    0.260

MCMN: 最小元数据容量

MCMX:最大元数据容量

MC:当前元数据空间大小

CCSMN:最小压缩类空间大小

CCSMX:最大压缩类空间大小

CCSC:当前压缩类空间大小

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

总结垃圾回收统计 gcutil

[root@localhost ~]# jstat -gcutil 17248

  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   

  0.00  94.16  77.77  22.32  97.79  92.45      7    0.190     1    0.070    0.260

S0:幸存1区当前使用比例

S1:幸存2区当前使用比例

E:伊甸园区使用比例

O:老年代使用比例

M:元数据区使用比例

CCS:压缩使用比例

YGC:年轻代垃圾回收次数

FGC:老年代垃圾回收次数

FGCT:老年代垃圾回收消耗时间

GCT:垃圾回收消耗总时间

JVM编译方法统计

[root@localhost ~]# jstat -printcompilation 17248

Compiled  Size  Type Method

    2639     79    1 org/apache/juli/AsyncFileHandler$LoggerThread run

Compiled:最近编译方法的数量

Size:最近编译方法的字节码数量

Type:最近编译方法的编译类型。

Method:方法名标识。

关于运维学习、分享、交流,笔者开通了微信公众号【运维猫】,感兴趣的朋友可以关注下,欢迎加入,建立属于我们自己的小圈子,一起学运维知识。

上一篇下一篇

猜你喜欢

热点阅读