jstat命令介绍

英文全称

Java Virtual Machine Statistics Minitoring Tool 用于收集HotSpot虚拟机各方面的运行数据

jstat可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。在没有GUI图像界面,只提供了命令行界面的服务器上,它将是运行期定位虚拟机性能问题的首选工具。

命令格式

jstat [option vmid [interval[s|ms] [count]] ]

说明

  • – VMID与LVMID需要特别说明下:如果是本地虚拟机进程,VMID和LVMID是一致的,如果是远程虚拟机进程,那VMID的格式应当是:[protocol:][//] lvmid [@hostname[:port]/servername]

  • –参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程25273垃圾收集状况,一共查询5次,那命令行如下:

[root@iZbp13vdh76h8tevitqolvZ ~]# jps -l
1848 sun.tools.jps.Jps
25273 org.apache.catalina.startup.Bootstrap
1914 com.aliyun.tianji.cloudmonitor.Application
[root@iZbp13vdh76h8tevitqolvZ ~]# jstat -gc 25273 250 5
 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
832.0  832.0   0.0   277.6   7168.0   6282.5   17548.0    17287.5   18176.0 17776.7 2048.0 1927.9   1859    2.926   1      0.020    2.946
832.0  832.0   0.0   277.6   7168.0   6282.5   17548.0    17287.5   18176.0 17776.7 2048.0 1927.9   1859    2.926   1      0.020    2.946
832.0  832.0   0.0   277.6   7168.0   6282.5   17548.0    17287.5   18176.0 17776.7 2048.0 1927.9   1859    2.926   1      0.020    2.946
832.0  832.0   0.0   277.6   7168.0   6282.5   17548.0    17287.5   18176.0 17776.7 2048.0 1927.9   1859    2.926   1      0.020    2.946
832.0  832.0   0.0   277.6   7168.0   6282.5   17548.0    17287.5   18176.0 17776.7 2048.0 1927.9   1859    2.926   1      0.020    2.946

选项

option代表这用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集和运行期编译状况,具体选项及作用如下:

  • -class :监视类装载、卸载数量、总空间及类装载所耗费的时间

  • -gc 监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量

  • -gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间

  • -gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 (这是博主在性能监控中最常用的选项)

  • -gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因

  • -gcnew 监视新生代GC的状况

  • -gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间

  • -gcold 监视老年代GC的状况

  • -gcoldcapacity 监视内容与——gcold基本相同,输出主要关注使用到的最大和最小空间

  • -gcpermcapacity 输出永久代使用到的最大和最小空间

  • -compiler 输出JIT编译器编译过的方法、耗时等信息

  • -printcompilation 输出已经被JIT编译的方法

示例

Tips :需要有JDK环境

[root@iZbp13vdh76h8tevitqolvZ ~]# jstat -gcutil 25273 5000 2
  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
 33.36   0.00   3.93  98.52  97.80  94.13   1860    2.928     1    0.020    2.948
 33.36   0.00   3.93  98.52  97.80  94.13   1860    2.928     1    0.020    2.948

监控结果说明

  1. 新生代Eden区(E 代表Eden)占用了3.93%的空间
  2. 两个Survivor区(S0、S1 代表Survivor0、Survivor1),其中S0占用了33.36%的空间,S1为0,Eden区空间不足时JVM会将部分活跃的对象放入到Survivor区,这里要注意的是:S0、S1永远只会使用其中一个,即S0、S1一定有一个为0
  3. 老年代(O 代表Old)占用了98.52%的空间
  4. 元空间(M 代表Metaspace)占用了97.80%,JDK8及以上版本移除了持久代,引入元空间 (博主服务器安装的是JDK8)
  5. CSS:压缩比例占用94.13% ,该指标一般不用太关注 ,JDK8及以上版本才有
  6. 程序运行以来共发生Minor GC(YGC Young GC)1860次,总耗时(YGCT,Young GC Time)2.928秒,发生Full GC(FGC)1次,总耗时(FGCT)0.020秒,所有GC总耗时(GCT)2.948秒

猜你喜欢

转载自blog.csdn.net/kuangay/article/details/80712837