加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

使用jstat命令查看jvm的GC情况

(2016-11-22 10:35:57)
标签:

it

分类: IT

        Jstat JDK自带的一个轻量级小工具。全称Java Virtual Machine statistics monitoring tool”,它位于javabin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。

        jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。

执行:cd $JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。


语法结构:

Usage: jstat -help|-options

       jstat -

[-t] [-h] [ []]

参数解释:

Options — 选项,我们一般使用 -gcutil 查看gc情况

vmid      — VM的进程号,即当前运行的java进程号

interval[s|ms]  ——  间隔时间,单位为秒或者毫秒,默认为ms。必须是正整型。

count     — 打印次数,如果缺省则打印无数次

输出参数:

-hn 每个n行输出一次列表头。默认为0,仅输出一次。

-tn 在第一列输出时间戳。该时间戳从jvm启动开始。

-JjavaOption

具体参数:

-class: 统计class loader 行为信息

-compiler: 统计编译行为信息

-gc:统计jdk gcheap信息

-gccapacity:统计不同的generations(新生代、老生代、永久代)相应的heap容量信息

-gccause:统计gc的情况,以及引起gc的事情。同-gcutil

-gcnew:统计新生代的gc情况

-gcnewcapacity:统计新生代gcheap的容量信息

-gcold:统计老生代的gc情况

-gcoldcapacity:统计老生代gcheap容量信息

-gcpermcapacity:统计永久代gc时的容量信息

-gcutil:统计heapgc情况

-printcompilation:没用过

jstat -gcutil 

结果信息:

S0  — Heap上的 Survivor space 0 区已使用空间的百分比
S1  — Heap
上的 Survivor space 1 区已使用空间的百分比
  — Heap
上的 Eden space 区已使用空间的百分比
  — Heap
上的 Old space 区已使用空间的百分比
  — Perm space 
区已使用空间的百分比
YGC — 
从应用程序启动到采样时发生 Young GC 的次数
YGCT– 
从应用程序启动到采样时 Young GC 所用的时间(单位秒)
FGC — 
从应用程序启动到采样时发生 Full GC 的次数
FGCT– 
从应用程序启动到采样时 Full GC 所用的时间(单位秒)
GCT — 
从应用程序启动到采样时用于垃圾回收的总时间(单位秒)

一.jstat -gc 12538 5000
即会每5秒一次显示进程号为12538的java进成的GC情况
显示内容如下图:

结果说明

显示内容说明如下(部分结果是通过其他其他参数显示的,暂不说明):
         S0C:年轻代中第一个survivor(幸存区)的容量 (字节) 
         S1C:年轻代中第二个survivor(幸存区)的容量 (字节) 
         S0U:年轻代中第一个survivor(幸存区)目前已使用空间 (字节) 
         S1U:年轻代中第二个survivor(幸存区)目前已使用空间 (字节) 
         EC:年轻代中Eden(伊甸园)的容量 (字节) 
         EU:年轻代中Eden(伊甸园)目前已使用空间 (字节) 
         OC:Old代的容量 (字节) 
         OU:Old代目前已使用空间 (字节) 
         PC:Perm(持久代)的容量 (字节) 
         PU:Perm(持久代)目前已使用空间 (字节) 
         YGC:从应用程序启动到采样时年轻代中gc次数 
         YGCT:从应用程序启动到采样时年轻代中gc所用时间(s) 
         FGC:从应用程序启动到采样时old代(全gc)gc次数 
         FGCT:从应用程序启动到采样时old代(全gc)gc所用时间(s) 
         GCT:从应用程序启动到采样时gc用的总时间(s) 
         NGCMN:年轻代(young)中初始化(最小)的大小 (字节) 
         NGCMX:年轻代(young)的最大容量 (字节) 
         NGC:年轻代(young)中当前的容量 (字节) 
         OGCMN:old代中初始化(最小)的大小 (字节) 
         OGCMX:old代的最大容量 (字节) 
         OGC:old代当前新生成的容量 (字节) 
         PGCMN:perm代中初始化(最小)的大小 (字节) 
         PGCMX:perm代的最大容量 (字节)   
         PGC:perm代当前新生成的容量 (字节) 
         S0:年轻代中第一个survivor(幸存区)已使用的占当前容量百分比 
         S1:年轻代中第二个survivor(幸存区)已使用的占当前容量百分比 
         E:年轻代中Eden(伊甸园)已使用的占当前容量百分比 
         O:old代已使用的占当前容量百分比 
         P:perm代已使用的占当前容量百分比 
         S0CMX:年轻代中第一个survivor(幸存区)的最大容量 (字节) 
         S1CMX :年轻代中第二个survivor(幸存区)的最大容量 (字节) 
         ECMX:年轻代中Eden(伊甸园)的最大容量 (字节) 
         DSS:当前需要survivor(幸存区)的容量 (字节)(Eden区已满) 
         TT: 持有次数限制 
         MTT : 最大持有次数限制 

       


二.jstat -gcutil 21891 250 7

 

21891 进程号; 250ms 采样interval 7 count
S0     S1                YGC    YGCT    FGC    FGCT     GCT
12.44   0.00  27.20   9.49  96.70    78    0.176       0.495    0.672
12.44   0.00  62.16   9.49  96.70    78    0.176       0.495    0.672
12.44   0.00  83.97   9.49  96.70    78    0.176       0.495    0.672
0.00    7.74   0.00   9.51  96.70    79    0.177       0.495    0.673
0.00    7.74  23.37   9.51  96.70    79    0.177       0.495    0.673
0.00    7.74  43.82   9.51  96.70    79    0.177       0.495    0.673
0.00    7.74  58.11   9.51  96.71    79    0.177       0.495    0.673


以上输出表明:
1. 
在第三行与第四行,发生一次新生代gc。 本次gc耗时0.001秒,且有对象从Eden区提升到老生代,老生代使用率从9.49% 上升到9.51%
2. gc
之前,survivor space 使用率12.44% gc后,降为7.74%


三.jstat -gcnew -h3 21891 250
       
 -h3
:每隔三行输出一次列表头; 21891:进程号; 250: interval采样间隔,ms count不设置,表示打印无数次

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     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     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


以上输出表明:
1.  S0U
 survivor space 0 utilization 

     DSS desired survivor Size 
     TT
 tenuring threshold 阀值, 用于控制对象在新生代存活的最大次数
2. 第二行和第三行之间,发生一次新生代gc。 耗时为0.001秒。
    本次gc发现较多的存活对象,且S0U超过了DSS,因此,将存活对象提升到老生代(这里没有显示)。并将 
     TT
31降到2.
3.  
另一次gc发生在第5行和第6行,本次gc发现较少的幸存对象,并将阀值变更为31


四.jstat -gcoldcapacity -t 21891 250 3


-t
在第一列输出时间戳; 21891:进程号; 250: 采样间隔ms采样次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


以上输出表明:
1. OGC
 old generation capacity 老生代空间大小
   OGCMN
:最小OGC
   OGCMX
: 最大OGC

   OC old space capacity
   FGC
 Full  GC
   OGC
 old generation capacity
2. Timestamp
jvm启动的时间开始。
3. 
第二行和第三行,经过81full gc OGC11696 KB 上升到13820 KB 
4. 
老生代最大空间大小OGCMX 60544 KB, 因此还有上升空间。



五.jstat -class pid

显示加载class的数量,及所占空间等信息。

[root@localhost bin]# jstat -class 25917

Loaded  Bytes  Unloaded  Bytes     Time

2629    2916.8       29   24.6     0.90

 


六.jstat -compiler pid

显示VM实时编译的数量等信息。

[root@localhost bin]# jstat -compiler 25917

Compiled Failed Invalid   Time   FailedType FailedMethod

 768            0.70            0

 


七.jstat –gccapacity

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的 是perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OCold内纯的占用量。

 

[root@localhost bin]# jstat -gccapacity 25917

NGCMN       640.0

NGCMX       4992.0

NGC         832.0

S0C         64.0

S1C         64.0

EC          704.0

OGCMN       1408.0

OGCMX       60544.0

OGC         9504.0

OC          9504.0                  OCold内纯的占用量

PGCMN       8192.0                  PGCMN显示的是最小perm的内存使用量

PGCMX       65536.0                 PGCMX显示的是perm的内存最大使用量

PGC         12800.0                 PGC是当前新生成的perm内存占用量

PC          12800.0                 PC是但前perm内存占用量

YGC         164

FGC         6

 


八.jstat -gcnew pid

new对象的信息

[root@localhost bin]# jstat -gcnew 25917

 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT

 64.0   64.0   47.4   0.0   15   32.0    704.0    145.7    168    0.254

 

九.jstat -gcnewcapacity pid: new对象的信息及其占用量

[root@localhost bin]# jstat -gcnewcapacity 25917

 NGCMN  NGCMX   NGC   S0CMX  S0C   S1CMX  S1C   ECMX    EC      YGC   FGC

640.0  4992.0  832.0 64.0   448.0 448.0  64.0   4096.0  704.0  168     6

 

十.jstat -gcold pid: old对象的信息。

[root@localhost bin]# jstat -gcold 25917

   PC       PU        OC          OU       YGC    FGC    FGCT     GCT

 12800.0  12617.6     9504.0      6561.3   169       0.335    0.591

 

十一.jstat -gcoldcapacity pid:old对象的信息及其占用量。

[root@localhost bin]# jstat -gcoldcapacity 25917

OGCMN      OGCMX        OGC         OC       YGC   FGC    FGCT     GCT

1408.0     60544.0      9504.0      9504.0   169       0.335    0.591

 

 十二.jstat -gcpermcapacity pid: perm对象的信息及其占用量。

[root@localhost bin]# jstat -gcpermcapacity 25917

PGCMN      PGCMX       PGC         PC      YGC   FGC    FGCT     GCT

8192.0    65536.0    12800.0    12800.0   169       0.335    0.591

 

十三.jstat -printcompilation pid: 当前VM执行的信息。

[root@localhost bin]# jstat -printcompilation -h3  25917 1000 5

1000毫秒打印一次,一共打印5次,还可以加上-h3每三行显示一下标题。

Compiled  Size  Type Method

     788     73    1 java/io/File

     788     73    1 java/io/File

     788     73    1 java/io/File

Compiled  Size  Type Method

     788     73    1 java/io/File

     788     73    1 java/io/File

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有