虚拟机工具-jstat

jstat : 虚拟机统计信息监视工具


功能描述

jstat(JVM Statistics Monitoring Tool) 用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或远程虚拟机进程中类装载、内存、垃圾收集、JIT编译等运行数据。


jstat命令格式

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

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每1000毫秒查询

一次进程9344垃圾收集状况,一共查询10次,那命令应当是:

jstat -gcutil 9344 1000 10


jstat工具主要选项

选项option代表着用户希望查询的虚拟机信息,主要分为3类:类装载、垃圾收集、运行期编译状况
选项 作用
-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间
-gc 监视Java堆状况,包括Eden区、两个survivor区、老年代、元空间的容量、已用空间、GC时间合计等信息
-gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间
-gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
-gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
-gcnew     监视新生代GC状况
-gcnewcapacity  监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-gcold 监视老年代状况
-gcoldcapacity     监视内容与-gcold基本相同,输出主要关注用到的最大、最小空间

-gcmetacapacity

输出元数据用到的最大、最小空间       
-compiler 输出JIT编译器编译过的方法、耗时等信息
-printcompilation 输出已经被JIT编译的方法

Example

依然以pid是9344为例

jstat -class  pid :
监视类装载、卸载数量、总空间以及类装载所耗费的时间
Loaded :  加载class的数量

Bytes: 加载的class所占空间大小

Unloaded: 未加载类的数量

Bytes:未加载的类所占空间大小

Time: 耗时

jstat -gc pid: 

垃圾回收统计

  • S0C:  年轻代中第一个survivor的容量(字节)
  • S1C: 年轻代中第二个survivor的容量(字节)
  • S0U: 年轻代中第一个survivor目前已使用的空间(字节)
  • S1U: 年轻代中第二个survivor目前已使用的空间(字节)
  • EC: 年轻代中Eden的容量(字节)
  • EU: 年轻代中Eden区目前已使用的空间
  • OC: old代的容量(字节)
  • OU: old代目前已使用的空间
  • MC:  方法区大小
  • MU: 方法区已使用空间大小
  • CCSC:  压缩类空间大小
  • CCSU: 压缩类已使用空间大小
  • YGC: 从应用程序启动到采样时年轻代中gc次数
  • YGCT: 从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC: 从应用程序启动到采样时old代(全GC)gc次数
  • FGCT: 从应用程序启动到采样时old代(全GC)gc所用时间(s)
  • GCT: 从应用程序启动到采样时GC所用的总时间




jstat -gccapacity pid:

堆内存统计

  • NGCMN: 新生代最小容量
  • NGCMX : 新生代最大容量
  • NGC:  当前新生代容量
  • S0C: S0区大小
  • S1C: S0区大小
  • EC: Eden区大小
  • OGCMN: 老年代最小容量
  • OGCMX: 老年代最大容量
  • OGC: 当前年老代的容量 (KB)
  • OC: 当前年老代的容量 (KB)
  • MCMN: 最小元数据容量
  • MCMX: 最大元数据容量
  • MC: 当前元数据空间大小
  • CCSMN: 最小压缩类空间大小
  • CCSMX: 最大压缩类空间大小
  • CCSC: 当前压缩类空间大小
  • YGC: 年轻代gc次数
  • FGC: 老年代GC次数




jstat -gcutil pid:

总结垃圾回收统计

  • S0:幸存1区当前使用比例
  • S1:幸存2区当前使用比例
  • E:伊甸园区使用比例
  • O:老年代使用比例
  • M:元数据区使用比例
  • CCS:压缩使用比例
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间

这里出现一个元空间的概念,什么是元空间呢?

其实元空间的本质和永久代类似,都是对JVM规范中方法区的实现,不过元空间与永久代之间的最大区别在于,元空间

不在虚拟机中,而是使用本地内存,因此,默认情况下,元空间的大小仅受本地内存


另外, 方法区(method area)只是 JVM规范中定义的一个概念,用于存储类信息、常量池、静态变量、JIT编译后的代码等数据,具体放在哪里,不同的实现可以放在不同的地方。而 永久代Hotspot虚拟机特有的概念,是方法区的一种实现,别的JVM都没有这个东西。1.8中 永久代被彻底移除,取而代之的是另一块与堆不相连的本地内存——元空间
jstat -gccause pid:

垃圾收集统计概述(同-gcutil),附加最近两次垃圾回收事件的原因

  • LGCC:最近垃圾回收的原因

  • GCC:当前垃圾回收的原因



jstat -gcnew pid:

新生代垃圾回收统计

  • S0C:第一个幸存区大小
  • S1C:第二个幸存区的大小
  • S0U:第一个幸存区的使用大小
  • S1U:第二个幸存区的使用大小
  • TT:对象在新生代存活的次数
  • MTT:对象在新生代存活的最大次数
  • DSS:期望的幸存区大小
  • EC:伊甸园区的大小
  • EU:伊甸园区的使用大小
  • YGC:年轻代垃圾回收次数
  • YGCT:年轻代垃圾回收消耗时间



jstat -gcnewcapacity pid:

新生代内存统计

  • NGCMN:新生代最小容量
  • NGCMX:新生代最大容量
  • NGC:当前新生代容量
  • S0CMX:最大幸存1区大小
  • S0C:当前幸存1区大小
  • S1CMX:最大幸存2区大小
  • S1C:当前幸存2区大小
  • ECMX:最大伊甸园区大小
  • EC:当前伊甸园区大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代回收次数


jstat -gcold 9344:

老年代垃圾回收统计

  • MC:方法区大小
  • MU:方法区使用大小
  • CCSC:压缩类空间大小
  • CCSU:压缩类空间使用大小
  • OC:老年代大小
  • OU:老年代使用大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间



jstat -gcoldcapacity pid: 

老年代内存统计

  • OGCMN:老年代最小容量
  • OGCMX:老年代最大容量
  • OGC:当前老年代大小
  • OC:老年代大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间



jstat -gcmetacapacity pid: 

元数据空间统计

  • MCMN:最小元数据容量
  • MCMX:最大元数据容量
  • MC:当前元数据空间大小
  • CCSMN:最小压缩类空间大小
  • CCSMX:最大压缩类空间大小
  • CCSC:当前压缩类空间大小
  • YGC:年轻代垃圾回收次数
  • FGC:老年代垃圾回收次数
  • FGCT:老年代垃圾回收消耗时间
  • GCT:垃圾回收消耗总时间



jstat -compiler pid:

JIT编译器过的方法、耗时等.

  • Compiled:编译数量。
  • Failed:失败数量
  • Invalid:不可用数量
  • Time:时间
  • FailedType:失败类型
  • FailedMethod:失败的方法



jstat -printcompilation pid:

已经被JIT编译过的方法

  • Compiled:最近编译方法的数量
  • Size:最近编译方法的字节码数量
  • Type:最近编译方法的编译类型。
  • Method:方法名标识。




参考:

https://blog.csdn.net/maosijunzi/article/details/46049117

https://docs.oracle.com/javase/6/docs/technotes/tools/share/jstat.html

https://yq.aliyun.com/articles/579458

         

猜你喜欢

转载自blog.csdn.net/yuchao2015/article/details/80319916