jstat使用方法

http://xueliang880107.iteye.com/blog/954073

  • 用以判断JVM是否存在内存问题呢?如何判断JVM垃圾回收是否正常?一般的top指令基本上满足不了这样的需求,因为它主要监控的是总体的系统资源,很难定位到java应用程序。  
  •   
  • Jstat 是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”,它位于 java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的 监控。可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。由于JVM内存设置较大,图中百分比变化不太明显  
  •   
  • 一个极强的监视VM内存工具。可以用来监视VM内存内的各种堆和非堆的大小及其内存使用量。  
  •   
  • jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。  
  •   
  • 执行:cd $JAVA_HOME/bin中执行jstat,注意jstat后一定要跟参数。  
  •   
  •    
  •   
  • jstat :对VM内存使用量进行监控。  
  •     jstat工具特别强大,有众多的可选项,详细查看堆内各个部分的使用量,以及加载类的数量。使用时,需加上查看进程的进程id,和所选参数。以下详细介绍各个参数的意义。  
  •     jstat -class pid:显示加载class的数量,及所占空间等信息。  
  •     jstat -compiler pid:显示VM实时编译的数量等信息。  
  •     jstat -gc pid:可以显示gc的信息,查看gc的次数,及时间。其中最后五项,分别是young gc的次数,young gc的时间,full gc的次数,full gc的时间,gc的总时间。  
  •     jstat -gccapacity: 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是 perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用 量。  
  •     jstat -gcnew pid:new对象的信息。  
  •     jstat -gcnewcapacity pid:new对象的信息及其占用量。  
  •     jstat -gcold pid:old对象的信息。  
  •     jstat -gcoldcapacity pid:old对象的信息及其占用量。  
  •     jstat -gcpermcapacity pid: perm对象的信息及其占用量。  
  •     jstat -util pid:统计gc信息统计。  
  •     jstat -printcompilation pid:当前VM执行的信息。  
  •     除了以上一个参数外,还可以同时加上 两个数字,如:jstat -printcompilation 3024 250 6是每250毫秒打印一次,一共打印6次,还可以加上-h3每三行显示一下标题。  
  •   
  •   
  • 语法结构:  
  •   
  • Usage: jstat -help|-options  
  •   
  •        jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]  
  •   
  •  参数解释:  
  •   
  • Options — 选项,我们一般使用 -gcutil 查看gc情况  
  •   
  • vmid    — VM的进程号,即当前运行的java进程号  
  •   
  • interval– 间隔时间,单位为秒或者毫秒  
  •   
  • count   — 打印次数,如果缺省则打印无数次  
  •   
  • S0  — Heap上的 Survivor space 0 区已使用空间的百分比  
  • S1  — Heap上的 Survivor space 1 区已使用空间的百分比  
  • E   — Heap上的 Eden space 区已使用空间的百分比  
  • O   — Heap上的 Old space 区已使用空间的百分比  
  • P   — Perm space 区已使用空间的百分比  
  • YGC — 从应用程序启动到采样时发生 Young GC 的次数  
  • YGCT– 从应用程序启动到采样时 Young GC 所用的时间(单位秒)  
  • FGC — 从应用程序启动到采样时发生 Full GC 的次数  
  • FGCT– 从应用程序启动到采样时 Full GC 所用的时间(单位秒)  
  • GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)  
  •   
  • 实例使用1:  
  •   
  • [root@localhost bin]# jstat -gcutil 25444  
  •   
  •   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
  •   
  •  11.63   0.00   56.46  66.92  98.49 162    0.248    6      0.331    0.579  
  •   
  • 实例使用2:(25444是java的进程号,ps -ef | grep java)  
  •   
  • [root@localhost bin]# jstat -gcutil 25444 1000 5  
  •   
  •   S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT  
  •   
  •  73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583  
  •   
  •  73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583  
  •   
  •  73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583  
  •   
  •  73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583  
  •   
  •  73.54   0.00  99.04  67.52  98.49    166    0.252     6    0.331    0.583  
  •   
  • 我们可以看到,5次young gc之后,垃圾内存被从Eden space区(E)放入了Old space区(O),并引起了百分比的变化,导致Survivor space使用的百分比从73.54%(S0)降到0%(S1)。有效释放了内存空间。绿框中,我们可以看到,一次full gc之后,Old space区(O)的内存被回收,从99.05%降到67.52%。  
  •   
  • 图中同时打印了young gc和full gc的总次数、总耗时。而,每次young gc消耗的时间,可以用相间隔的两行YGCT相减得到。每次full gc消耗的时间,可以用相隔的两行FGCT相减得到。例如红框中表示的第一行、第二行之间发生了1次young gc,消耗的时间为0.252-0.252=0.0秒。  
  •   
  • 常驻内存区(P)的使用率,始终停留在98.49%左右,说明常驻内存没有突变,比较正常。  
  •   
  • 如果young gc和full gc能够正常发生,而且都能有效回收内存,常驻内存区变化不明显,则说明java内存释放情况正常,垃圾回收及时,java内存泄露的几率就会大大降低。但也不能说明一定没有内存泄露。  
  •   
  • GCT 是YGCT 和FGCT的时间总和。  
  •   
  • 以上,介绍了Jstat按百分比查看gc情况的功能。其实,它还有功能,例如加载类信息统计功能、内存池信息统计功能等,那些是以绝对值的形式打印出来的,比较少用,在此就不做介绍。  
  •   
  • [root@localhost bin]# ps -ef | grep java  
  •   
  • root     25917     1  2 23:23 pts/2    00:00:05 /usr/local/jdk1.5/bin/java -Djava.endorsed.dirs=/usr/local/jakarta-tomcat-5.0.30/common/endorsed -classpath /usr/local/jdk1.5/lib/tools.jar:/usr/local/jakarta-tomcat-5.0.30/bin/bootstrap.jar:/usr/local/jakarta-tomcat-5.0.30/bin/commons-logging-api.jar -Dcatalina.base=/usr/local/jakarta-tomcat-5.0.30 -Dcatalina.home=/usr/local/jakarta-tomcat-5.0.30 -Djava.io.tmpdir=/usr/local/jakarta-tomcat-5.0.30/temp org.apache.catalina.startup.Bootstrap start  
  •   
  • jstat -class pid:显示加载class的数量,及所占空间等信息。  
  •   
  • 实例使用3:  
  •   
  • [root@localhost bin]# jstat -class 25917  
  •   
  • Loaded  Bytes  Unloaded  Bytes     Time  
  •   
  • 2629    2916.8       29   24.6     0.90  
  •   
  • jstat -compiler pid:显示VM实时编译的数量等信息。  
  •   
  • 实例使用4:  
  •   
  • [root@localhost bin]# jstat -compiler 25917  
  •   
  • Compiled Failed Invalid   Time   FailedType FailedMethod  
  •   
  •      768      0       0   0.70            0  
  •   
  • jstat –gccapacity : 可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小,如:PGCMN显示的是最小perm的内存使用量,PGCMX显示的是 perm的内存最大使用量,PGC是当前新生成的perm内存占用量,PC是但前perm内存占用量。其他的可以根据这个类推, OC是old内纯的占用 量。  
  •   
  • [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                  OC是old内纯的占用量  
  •   
  • 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   2  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     6    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     6    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     6    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 <init>  
  •   
  •      788     73    1 java/io/File <init>  
  •   
  •      788     73    1 java/io/File <init>  
  •   
  • Compiled  Size  Type Method  
  •   
  •      788     73    1 java/io/File <init>  
  •   
  •      788     73    1 java/io/File <init> 

posted on 2015-09-30 09:55  悄悄的来,匆匆的走  阅读(262)  评论(0编辑  收藏  举报

导航