什么是jstat
Jstat是JDK自带的一个轻量级小工具。全称“Java Virtual Machine statistics monitoring tool”。
它位于java的bin目录下,主要利用JVM内建的指令对Java应用程序的资源和性能进行实时的命令行的监控,包括了对Heap size和垃圾回收状况的监控。
可见,Jstat是轻量级的、专门针对JVM的工具,非常适用。
jstat 命令相关参数
1 | jstat命令命令格式: |
-gc(GC堆状态)
示例:jstat -gc 1601 5000 3
说明:每5秒一次 打印3次 显示进程号为1601的 java进成的 GC情况,结果如下图
1 | [root@iZ94sbzk035Z ~]# jstat -gc 1601 5000 3 |
参数说明
| 显示列名 | 具体描述 |
|---|---|
| S0C | 年轻代中第一个survivor(幸存区)的容量 (KB) |
| S1C | 年轻代中第二个survivor(幸存区)的容量 (KB) |
| S0U | 年轻代中第一个survivor(幸存区)目前已使用空间 (KB) |
| S1U | 年轻代中第二个survivor(幸存区)目前已使用空间 (KB) |
| EC | 年轻代中Eden(伊甸园)的容量 (KB) |
| EU | 年轻代中Eden(伊甸园)目前已使用空间 (KB) |
| OC | 老年代大小(KB) |
| OU | 老年代目前使用大小(KB) |
| MC | 方法区大小 |
| MU | 方法区使用大小 |
| CCSC | 压缩类空间大小 |
| CCSU | 压缩类空间使用大小 |
| YGC | 年轻代垃圾回收次数:从应用程序启动到采样时年轻代中gc次数 |
| YGCT | 年轻代垃圾回收消耗时间:从应用程序启动到采样时年轻代中gc所用时间(s) |
| FGC | 老年代垃圾回收次数:从应用程序启动到采样时old代(全gc)gc次数 |
| FGCT | 老年代垃圾回收消耗时间:从应用程序启动到采样时old代(全gc)gc所用时间(s) |
| GCT | 垃圾回收消耗总时间:从应用程序启动到采样时gc用的总时间(s) |
-gcutil (GC统计汇总)
示例:jstat -gcutil 1601 5000 3
说明:每5秒一次 打印3次 显示进程号为1601的 java进程垃圾回收统计情况,结果如下图
1 | [root@iZ94sbzk035Z ~]# jstat -gcutil 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| S0 | 年轻代中第一个survivor(幸存区)的容量 (KB) |
| S1 | 年轻代中第二个survivor(幸存区)的容量 (KB) |
| E | 伊甸园区使用比例 |
| O | 老年代使用比例 |
| M | 元数据区使用比例 |
| CCS | 压缩使用比例 |
| YGC | 年轻代垃圾回收次数 |
| YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
| FGC | 老年代垃圾回收次数 |
| FGCT | 老年代垃圾回收消耗时间 |
| GCT | 垃圾回收消耗总时间 |
-class(类加载器)
示例:每5秒一次 打印3次 显示进程号为1601的加载class的数量,及所占空间等信息
1 | [root@iZ94sbzk035Z ~]# jstat -class 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| Loaded | 装载的类的数量 |
| Bytes | 装载类所占用的字节数 |
| Unloaded | 卸载类的数量 |
| Bytes | 卸载类的字节数 |
| Time | 装载和卸载类所花费的时间 |
-compiler (JIT,统计编译行为信息)
示例:每5秒一次 打印3次 显示进程号为1601的显示JVM实时编译的数量等信息
1 |
|
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| Compiled | 编译任务执行数量 |
| Failed | 编译任务执行失败数量 |
| Invalid | 编译任务执行失效数量 |
| Time | 编译任务消耗时间 |
| FailedType | 最后一个编译失败任务的类型 |
| FailedMethod | 最后一个编译失败任务所在的类及方法 |
-gccapacity (各区大小)
统计不同 generations(新生代,老年代,持久代)的 heap容量情况
示例:每5秒一次 打印3次 显示进程号为1601的显示JVM内存中三代(young,old,perm)对象的使用和占用大小
1 | [root@iZ94sbzk035Z ~]# jstat -gccapacity 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| NGCMN | 年轻代(young)中初始化(最小)的大小(KB) |
| NGCMX | 年轻代(young)的最大容量 (KB) |
| NGC | 年轻代(young)中当前的容量 (KB) |
| S0C | 年轻代中第一个survivor(幸存区)的容量 (KB) |
| S1C | 年轻代中第二个survivor(幸存区)的容量 (KB) |
| EC | 年轻代中Eden(伊甸园)的容量 (KB) |
| OGCMN | old代中初始化(最小)的大小 (KB) |
| OGCMX | old代的最大容量(KB) |
| OGC | old代当前新生成的容量 (KB) |
| OC | Old代的容量 (KB) |
| YGC | 从应用程序启动到采样时年轻代中gc次数 |
| FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
-gccause(统计引起 gc的事件)
示例:每5秒一次 打印3次 显示进程号为1601统计引起 gc的事件
1 | [root@iZ94sbzk035Z ~]# jstat -gccause 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|
-gcnew:(统计新生代的情况)
示例:每5秒一次 打印3次 显示进程号为1601的显示JVM内存中三代(young,old,perm)对象的使用和占用大小
1 | [root@iZ94sbzk035Z ~]# jstat -gcnew 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| S0C | 年轻代中第一个survivor(幸存区)的容量 (KB) |
| S1C | 年轻代中第二个survivor(幸存区)的容量 (KB) |
| S0U | 年轻代中第一个survivor(幸存区)目前已使用空间 (KB) |
| S1U | 年轻代中第二个survivor(幸存区)目前已使用空间 (KB) |
| TT | 持有次数限制 |
| MTT | 最大持有次数限制 |
| DSS | |
| EC | 年轻代中Eden(伊甸园)的容量 (KB) |
| EU | 年轻代中Eden(伊甸园)目前已使用空间 (KB) |
| YGC | 从应用程序启动到采样时年轻代中gc次数 |
| YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
-gcnewcapacity(统计新生代 heap容量)
示例:每5秒一次 打印3次 显示进程号为1601的显示年轻代对象的信息及其占用量
1 | [root@iZ94sbzk035Z ~]# jstat -gcnewcapacity 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| NGCMN | 年轻代(young)中初始化(最小)的大小(KB) |
| NGCMX | 年轻代(young)的最大容量 (KB) |
| NGC | 年轻代(young)中当前的容量 (KB) |
| S0CMX | 年轻代中第一个survivor(幸存区)的最大容量 (KB) |
| S0C | 年轻代中第一个survivor(幸存区)的容量 (KB) |
| S1CMX | 年轻代中第二个survivor(幸存区)的最大容量 (KB) |
| S1C | 年轻代中第二个survivor(幸存区)的容量 (KB) |
| ECMX | 年轻代中Eden(伊甸园)的最大容量 (KB) |
| EC | 年轻代中Eden(伊甸园)的容量 (KB) |
| YGC | 从应用程序启动到采样时年轻代中gc次数 |
| FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
-gcold(统计老年代的情况)
示例:每5秒一次 打印3次 显示进程号为1601的显示old代对象的信息
1 | [root@iZ94sbzk035Z ~]# jstat -gcold 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| MC | |
| MU | |
| CCSC | |
| CCSU | |
| OC | Old代的容量 (KB) |
| OU | Old代目前已使用空间 (KB) |
| YGC | 从应用程序启动到采样时年轻代中gc次数 |
| FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
| FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
| GCT | 从应用程序启动到采样时gc用的总时间(s) |
-gcoldcapacity(统计老年代 heap容量)
示例:每5秒一次 打印3次 显示进程号为1601的显示old代对象的信息及其占用量。
1 | [root@iZ94sbzk035Z ~]# jstat -gcoldcapacity 1601 5000 3 |
参数说明:
| 显示列名 | 具体描述 |
|---|---|
| OGCMN | old代中初始化(最小)的大小 (KB) |
| OGCMX | old代的最大容量(KB) |
| OGC | old代当前新生成的容量 (KB) |
| OC | Old代的容量 (KB) |
| YGC | 从应用程序启动到采样时年轻代中gc次数 |
| FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
| FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
| GCT | 从应用程序启动到采样时gc用的总时间(s) |