上一篇文章我们说了其他几个虚拟机的命令及其含义,本文来单独说下命令jstat。
jstat: 查看虚拟机运行时信息
jstat(JVM Statistics Monitoring Tool) 是用于监视虚拟机各种运行状态信息的命令工具。是比较强大的,可以用来查看堆信息的详细情况。
使用语法如下(自己可以用命令 jstat -help看看)
jstat -{option} [-t] [-h{lines}] {vmid} [{interval} [{count}]]
-
选项option
- -class: 监视类装载、卸载数量、中空间及类装载所耗费的时间。
- -compiler: 显示JIT编译的相关信息。
- -gc: 监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等容量、已用空间、GC合计时间等信息。
- -gccapacity: 监视内容与-gc基本相同,但输出主要关注java堆各区域使用到的最大和最小空间。
- -gcutil: 监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。
- -gccause: 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因。
- -gcnew: 监视新生代GC的状况。
- -gcnewcapacity: 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间。
- -gcold: 监视老年代垃圾收集状况。
- -gcoldcapacity: 视内容与-gcold基本相同,输出主要关注使用到的最大和最小空间。
- -gcmetacapacity: 输出元空间使用到的最大和最小空间。
- -printcompilation: 输出已被JIT编译的方法。
-
-t 参数可以在输出信息前加上一个Timestamp列,显示程序的运行时间。
-
-h 参数可以在周期性数据输出时,输出多少行数据后,跟着输出一个表头信息。
-
interval 参数用于指定输出统计数据的周期,单位是毫秒。
-
count 参数用于指定一共输出多少次数据。
参数interval和count代表查询间隔和次数,如果省略这2个参数,说明只查询一次。假设需要每250毫秒查询一次进程537垃圾收集状况,一共查询20次,命令应该是:jstat -gc 537 250 20
1. 如下输出Java进程537的类信息:-class
ajisun@ajisun-2 /> jstat -class -t 537
Timestamp Loaded Bytes Unloaded Bytes Time
839950.5 1888 3788.9 0 0.0 3.80
在上面输出的内容中 Loaded表示载入类的数量,Bytes表示载入类的合计大小,Unloaded表示卸载类的数量,接着后面一个Bytes表示卸载类的大小,Time表示在加载和卸载类上所花费的时间。
2. 查看JIT编译的信息:-compiler
ajisun@ajisun-2 /> jstat -compiler 537
Compiled Failed Invalid Time FailedType FailedMethod
992 1 0 2.63 1 java/util/jar/Attributes read
- Compiled:编译数量。
- Failed:失败数量
- Invalid:不可用数量
- Time:编译总时间
- FailedType:最后一次编译失败的类型
- FailedMethod:最后一次编译失败的类名和方法名
3. 显示gc的命令和相关的输出:-gc
ajisun@ajisun-2 /> jstat -gc 537
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
512.0 512.0 0.0 96.0 31232.0 6247.0 175104.0 2688.4 11904.0 11467.9 1408.0 1266.3 247 1.518 0 0.000 1.518
- S0C : 年轻代中第一个survior(幸存区)的容量(kb)
- S1C : 年轻代中第二个survior(幸存区)的容量(kb)
- S0U : 年轻代中第一个survior(幸存区)目前已使用的容量(kb)
- S1U : 年轻代中第二个survior(幸存区)目前已使用的容量(kb)
- EC : eden区的容量(kb)
- EU : eden区目前已使用的容量(kb)
- OC : 老年代的容量(kb)
- OU : 老年代目前已使用的容量(kb)
- MC : 元数据区的容量(kb)
- MU : 元数据区目前已使用的容量(kb)
- CCSC : 压缩类空间大小(kb)
- CCSU : 压缩类空间使用大小(kb)
- YGC : 从应用程序启动到采集时年轻代中gc次数
- YGCT : 从应用程序启动到采集时年轻代中gc所用时间(秒)
- FGC : 从应用程序启动到采集时老年代中gc次数
- FGCT : 从应用程序启动到采集时老年代gc所用的时间(秒)
- GCT : 从应用程序启动到采集时gc所用的总时间(秒)
号外 : 之前的PC 和PU 被MC MU取代了,而且增加了CCSC ,CCSU
4. 查看Java堆的各个代当前大小以及其最大值最小值:-gccapacity
ajisun@ajisun-2 /> jstat -gccapacity 537
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
87040.0 1397760.0 87040.0 10752.0 10752.0 65536.0 175104.0 2796544.0 175104.0 175104.0 0.0 1060864.0 11904.0 0.0 1048576.0 1408.0 1 0
- NGCMN:新生代最小容量(kb)
- NGCMX:新生代最大容量(kb)
- NGC:当前新生代容量(kb)
- S0C:第一个幸存区大小(kb)
- S1C:第二个幸存区的大小(kb)
- EC:伊甸园区的大小(kb)
- OGCMN:老年代最小容量(kb)
- OGCMX:老年代最大容量(kb)
- OGC :当前老年代大小(kb)
- OC : 当前老年代大小(kb)
- MCMN: 最小元数据容量(kb)
- MCMX:最大元数据容量(kb)
- MC:当前元数据空间大小(kb)
- CCSMN:最小压缩类空间大小(kb)
- CCSMX:最大压缩类空间大小(kb)
- CCSC:当前压缩类空间大小(kb)
- YGC:年轻代gc次数
- FGC:老年代GC次数
5. 已使用空间占总空间的百分比:-gcutil
ajisun@ajisun-2 /> jstat -gcutil 537
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 57.42 28.14 0.02 95.16 89.32 1 0.015 0 0.000 0.015
- S0:幸存1区当前使用比例
- S1:幸存2区当前使用比例
- E:伊甸园区使用比例
- O:老年代使用比例
- M:元数据区使用比例
- CCS:压缩使用比例
- YGC:年轻代垃圾回收次数
- YGCT:年轻代中gc所用时间(秒)
- FGC:老年代垃圾回收次数
- FGCT:老年代垃圾回收消耗时间
- GCT:垃圾回收消耗总时间
6. 显示最近一次GC的原因以及当前GC的原因:-gccause
ajisun@ajisun-2 /> jstat -gccause 537
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 57.42 31.48 0.02 95.16 89.32 1 0.015 0 0.000 0.015 Allocation Failure No GC
- LGCC:上次GC的原因
- GCC:当前GC的原因
其他输出含义请参考-gcutil,-gc
7. 查看新生代GC的状况:-gcnew
ajisun@ajisun-2 /> jstat -gcnew 537
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
10752.0 10752.0 0.0 6173.9 7 15 10752.0 65536.0 21728.3 1 0.015
- TT:新生代对象晋升到老年代对象的年龄
- MTT:新生代对象晋升到老年代对象的年龄最大值
- DSS:需要的幸存区大小
其他输出含义请参考-gcutil,-gc
8. 查看新生代各个区的大小信息:-gcnewcapacity
ajisun@ajisun-2 /> jstat -gcnewcapacity 537
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
87040.0 1397760.0 87040.0 465920.0 10752.0 465920.0 10752.0 1396736.0 65536.0 1 0
- S0CMX:s0区的最大值(kb)
- S1CMX:s1区的最大值(kb)
- ECMX:伊甸园区最大值(kb)
其他输出含义请参考-gcutil,-gc
9. 查看老年代GC状况:-gcold
ajisun@ajisun-2 /> jstat -gcold 537
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
11904.0 11328.4 1408.0 1257.7 175104.0 32.0 1 0 0.000 0.015
具体输出含义请参考-gcutil,-gc
10. 查看老年代的容量信息:-gcoldcapacity
ajisun@ajisun-2 /> jstat -gcoldcapacity 537
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
175104.0 2796544.0 175104.0 175104.0 1 0 0.000 0.015
具体输出含义请参考-gcutil,-gc
11. 查看元空间的使用情况:-gcmetacapacity
ajisun@ajisun-2 /> jstat -gcmetacapacity 537
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1060864.0 11904.0 0.0 1048576.0 1408.0 1 0 0.000 0.015
具体输出含义请参考-gcutil,-gc
12. 输出已被即时编译的方法:-printcompilation
ajisun@ajisun-2 /> jstat -printcompilation 537
Compiled Size Type Method
1008 38 1 java/util/concurrent/TimeUnit$3 toNanos
- Compiled:最近编译方法的数量
- Size:最近编译方法的字节码数量
- Type:最近编译方法的编译类型。
- Method:方法名标识。
号外:jstat命令可以详细的查看Java应用程序堆的使用情况以及GC情况
我是纪先生,用输出倒逼输入而持续学习,持续分享技术系列文章,以及全网值得收藏好文,欢迎关注公众号,做一个持续成长的技术人。
JVM虚拟机系列历史文章