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