jstat命令

    监控JVM状态。

概要

jstat [ generalOption | outputOptions vmid [ interval[s|ms] [ count ] ]

generalOption

    在使用通用选项后,不能跟其他参数。

  • -help显示帮助信息。
  • -options显示统计选项。

outputOptions

    一个统计选项加一些额外选项如-t*,-h-J*。

    输出为一个表格,以空格隔开。-h*为头部信息显示频率。-t显示从JVM启动开始经过的时间,单位秒。interval制定显示频率,count指定次数。-J*javaOption:传递java参数到java应用启动器;如-J-Xms48m设定启动内存为48MB。

统计选项如下:

  • class 显示统计类加载器信息。

    1
    2
    3
    -> % jstat -class 3431
    Loaded Bytes Unloaded Bytes Time
    7474 13825.1 48 64.0 7.10
    列名 描述
    Loaded 装载的类的数量
    Bytes 装载类所占用的字节数
    Unloaded 卸载类的数量
    Bytes 卸载类的字节数
    Time 装载和卸载类所花费的时间
  • compiler 显示JVM 即时编译器统计信息。

1
2
3
-> % jstat -compiler 3431
Compiled Failed Invalid Time FailedType FailedMethod
12443 1 0 85.52 1 com/mysql/jdbc/AbandonedConnectionCleanupThread run
列名 描述
Compiled 编译任务执行数量
Failed 编译任务执行失败数量
Invalid 编译任务执行失效数量
Time 编译任务消耗时间
FailedType 最后一个编译失败任务的类型
FailedMethod 最后一个编译失败任务所在的类及方法
* gc 显示垃圾回收堆信息。
1
2
3
-> % jstat -gc 3431      
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
1536.0 1536.0 967.7 0.0 128000.0 79183.5 131072.0 125499.8 46720.0 45479.5 5248.0 4909.1 11563 54.785 66 9.381 64.166

    后缀C为容量,U为已使用空间,T为时间;首字符S为survivor区域,E为eden区,O为老年区,M为MetaSpace;CCS为压缩类空间,YGC为年轻代垃圾回收,FGC为FullGC;GCT为垃圾回收总时间。这里空间大小单位为KB,时间单位为秒,YGC和FGC单位为次。

  • gccapacity 显示各代容量统计信息。
1
2
3
-> % jstat -gccapacity 3431
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
131072.0 131072.0 131072.0 1536.0 1536.0 128000.0 131072.0 131072.0 131072.0 131072.0 0.0 1091584.0 46720.0 0.0 1048576.0 5248.0 11600 67

    NGC:新生代大小,OGC:老年代大小,MCM:meta space大小;MN:最小值,MX:最大值;其他参考gc选项。

  • gccause 汇总垃圾统计信息(同-gcutil)和原因。
1
2
3
-> % jstat -gccause 3431   
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
0.00 57.54 50.05 69.07 97.34 93.54 11624 55.100 67 9.567 64.667 Allocation Failure No GC

    这里的空间为已使用的百分比表示,如S1为57.54表示survivor 1已使用了57.54%。LGCC为最近一次造成垃圾回收的原因,GCC为当前垃圾回收的原因。

  • gcnew 年轻代对象的信息。
1
2
3
-> % jstat -gcnew 3431 
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
1536.0 1536.0 1014.0 0.0 1 15 1536.0 128000.0 23834.4 11673 55.350

    TT:晋升阈值;MIT:最大晋升阈值;DSS:期望幸存区大小。

  • gcnewcapacity 年轻代对象的信息及其占用量。
1
2
3
-> % jstat -gcnewcapacity 3431
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
131072.0 131072.0 131072.0 10752.0 1536.0 10752.0 1536.0 130048.0 128000.0 11696 67

    CMX:容量最大值。

  • gcold 老年区以及元区域的对象统计信息。
1
2
3
-> % jstat -gcold 3431        
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
46720.0 45479.5 5248.0 4909.1 131072.0 117544.4 11705 67 9.567 65.092
  • gcoldcapacity 老年区以及元区域的对象以及容量信息统计信息。
1
2
3
-> % jstat -gcoldcapacity 3431
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
131072.0 131072.0 131072.0 131072.0 11709 67 9.567 65.126
  • gcmetacapacity metaspace区域大小信息。
1
2
3
-> % jstat -gcmetacapacity 3431
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1091584.0 46720.0 0.0 1048576.0 5248.0 11714 67 9.567 65.152
  • gcutil 垃圾回收统计信息。
1
2
3
-> % jstat -gcutil 3431        
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 65.01 30.50 92.93 97.34 93.54 11718 55.611 67 9.567 65.177

    这里的空间描述为使用百分比。

  • printcompilation 当前VM执行的信息
1
2
3
-> % jstat -printcompilation 3431
Compiled Size Type Method
12444 1734 1 org/quartz/core/QuartzSchedulerThread run
列名 描述
Compiled 最近编译的方法执行的编译任务数
Size 最近方法生成的字节码的大小
Type 最近编译类型
Method 最近编译方法 类名 方法名

示例

    带时间戳,没3行显示一次头部,采样间隔为1秒,采样5次:

1
2
3
4
5
6
7
8
-> % jstat -gcutil -t -h3 3431 1s 5 
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
195385.4 0.00 55.53 12.10 58.00 97.34 93.54 11756 55.817 68 10.046 65.864
195386.4 0.00 55.53 22.52 58.00 97.34 93.54 11756 55.817 68 10.046 65.864
195387.4 0.00 55.53 24.07 58.00 97.34 93.54 11756 55.817 68 10.046 65.864
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
195388.4 0.00 55.53 34.22 58.00 97.34 93.54 11756 55.817 68 10.046 65.864
195389.4 0.00 55.53 35.81 58.00 97.34 93.54 11756 55.817 68 10.046 65.864

参考