jstat:虚拟机统计信息监控工具
| 属性 | 说明 |
|---|
| Options | 选项,我们一般使用 -gcutil 查看gc情况 |
| vmid | VM的进程号,即当前运行的java进程号 |
| interval | 间隔时间,单位为秒或者毫秒 |
| count | 打印次数,如果缺省则打印无数次 |
jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选项工具。
jstat命令格式为:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数解释:
| 属性 | 说明 |
|---|
| Options | 选项,我们一般使用 -gcutil 查看gc情况 |
| vmid | VM的进程号,即当前运行的java进程号 |
| interval | 间隔时间,单位为秒或者毫秒 |
| count | 打印次数,如果缺省则打印无数次 |
| 选项 | 作用 |
|---|
| -class | 监控类装载、卸载数量、总空间及类装载所耗费的时间 |
| -gc | 监控Java堆状况,包括Eden区、2个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
| -gccapacity | 监控内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间 |
| -gcutil | 监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
| -gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
| -gcnew | 监控新生代GC的状况 |
| -gcnewcapacity | 监控内容与-gcnew基本相同,输出主要关注使用到的最大与最小空间 |
| -gcold | 监控老年代GC的状况 |
| -gcoldcapacity | 监控内容与-gcold基本相同,输出主要关注使用到的最大与最小空间 |
| -gcpermcapacity | 监控永久代使用到的最大和最小空间 |
| -compiler | 输出JIT编译器编译过的方法、耗时等信息 |
| -printcompilation | 输出已经被JIT编译的方法 |
jstat工具主要选项
| 选项 | 作用 |
|---|
| -class | 监控类装载、卸载数量、总空间及类装载所耗费的时间 |
| -gc | 监控Java堆状况,包括Eden区、2个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
| -gccapacity | 监控内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间 |
| -gcutil | 监控内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
| -gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
| -gcnew | 监控新生代GC的状况 |
| -gcnewcapacity | 监控内容与-gcnew基本相同,输出主要关注使用到的最大与最小空间 |
| -gcold | 监控老年代GC的状况 |
| -gcoldcapacity | 监控内容与-gcold基本相同,输出主要关注使用到的最大与最小空间 |
| -gcpermcapacity | 监控永久代使用到的最大和最小空间 |
| -compiler | 输出JIT编译器编译过的方法、耗时等信息 |
| -printcompilation | 输出已经被JIT编译的方法 |
STATOPTIONS和输出
下列表格概括了jstat为每个statOption输出的列。
- -class 类加载器的统计信息
| 列 | 描述 |
|---|
| Loaded | 加载的类的数量 |
| Bytes | 加载的Kbyte数 |
| Unloaded | 已卸载的类的数量 |
| Bytes | 已卸载的Kbyte数 |
| Time | 执行类的加载和卸载操作所耗费的时间 |
- -gc 垃圾回收堆的统计信息
| 列 | 描述 |
|---|
| S0C | survivor space 0的当前容量(KB). |
| S1C | survivor space 1的当前容量(KB). |
| S0U | survivor space 0使用的容量(KB). |
| S1U | survivor space 1使用的容量(KB). |
| EC | Eden space的当前容量(KB). |
| EU | Edenspace的已用容量(KB). |
| OC | Oldspace的当前容量(KB). |
| OU | Old space的已用容量(KB). |
| PC | Permanent space的当前容量(KB). |
| PU | Permanentspace的已用容量(KB). |
| YGC | Younggeneration的GC事件数量 |
| YGCT | Younggeneration的垃圾回收事件 |
| FGC | Full GC事件的数量 |
| FGCT | Full GC的时间 |
| GCT | 总计的垃圾回收时间 |
- -gccapacity 内存池的分代和空间容量Memory Pool Generation and Space Capacities
| 列 | 描述 |
|---|
| NGCMN | newgeneration的最小容量(KB). |
| NGCMX | newgeneration的最大容量(KB). |
| NGC | newgeneration的当前容量(KB). |
| S0C | survivor space 0的当前容量(KB). |
| S1C | survivor space 1的当前容量(KB). |
| EC | Eden space的当前容量(KB). |
| OGCMN | Old generation的最小容量(KB). |
| OGCMX | Oldgeneration的最大容量(KB). |
| OGC | Oldgeneration的当前容量(KB). |
| OC | Old space的当前容量(KB). |
| PGCMN | Permanentgeneration的最小容量(KB). |
| PGCMX | Permanentgeneration的最大容量(KB). |
| PGC | Permanentgeneration的当前容量(KB). |
| PC | Permanent space的当前容量(KB). |
| YGC | Younggeneration的GC事件数 |
| FGC | Full GC事件的数量 |
- -gcutil 垃圾回收统计的摘要信息
[root@localhost ~]# jstat -gcutil 29817
S0 S1 E O P YGC YGCT FGC FGCT GCT
0.00 38.77 100.00 9.00 � 21 1.300 3 0.715 2.015
| 列 | 描述 |
|---|
| S0 | Heap上的 Survivor space 0 区已使用空间的百分比 |
| S1 | Heap上的 Survivor space 1 区已使用空间的百分比 |
| E | Heap上的 Eden space 区已使用空间的百分比 |
| O | Heap上的 Old space 区已使用空间的百分比 |
| P | Perm space 区已使用空间的百分比 |
| YGC | 从应用程序启动到采样时发生 Young GC 的次数 |
| YGCT | 从应用程序启动到采样时 Young GC 所用的时间(单位秒) |
| FGC | 从应用程序启动到采样时发生 Full GC 的次数 |
| FGCT | 从应用程序启动到采样时 Full GC 所用的时间(单位秒) |
| GCT | 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) |
结果说明:
| 列 | 描述 |
|---|
| S0 | Heap上的 Survivor space 0 区已使用空间的百分比 |
| S1 | Heap上的 Survivor space 1 区已使用空间的百分比 |
| E | Heap上的 Eden space 区已使用空间的百分比 |
| O | Heap上的 Old space 区已使用空间的百分比 |
| P | Perm space 区已使用空间的百分比 |
| YGC | 从应用程序启动到采样时发生 Young GC 的次数 |
| YGCT | 从应用程序启动到采样时 Young GC 所用的时间(单位秒) |
| FGC | 从应用程序启动到采样时发生 Full GC 的次数 |
| FGCT | 从应用程序启动到采样时 Full GC 所用的时间(单位秒) |
| GCT | 从应用程序启动到采样时用于垃圾回收的总时间(单位秒) |
- -gccause 垃圾回收统计,包括GC事件
此选项显示与-gcutil选项相同的垃圾回收统计摘要信息,但却包括最后的和当前的(如适用)垃圾回收事件的原因。除了-gcutil列出的列,此选项还添加了以下列:
| 列 | 描述 |
|---|
| LGCC | 最后的垃圾回收的原因 |
| GCC | 当前的垃圾回收的原因 |
- -gcnew 新生代(New)的统计信息
| 列 | 描述 |
|---|
| S0C | survivor space 0的当前容量(KB). |
| S1C | survivor space 1的当前容量(KB). |
| S0U | survivor space 0的已用容量(KB). |
| S1U | survivor space 1的已用容量(KB). |
| TT | 期限阈值 |
| MTT | 最大的期限阈值 |
| DSS | 所需的幸存者(survivor)大小(KB). |
| EC | Eden space的当前容量(KB). |
| EU | Eden space的已用容量(KB). |
| YGC | Young generation的GC事件数 |
| YGCT | Young generation的垃圾回收时间 |
- -gcnewcapacity 新生代(new)的空间大小统计
| 列 | 描述 |
|---|
| NGCMN | new generation的最小容量(KB). |
| NGCMX | new generation的最大容量(KB). |
| NGC | new generation的当前容量(KB). |
| S0CMX | survivor space 0的最大容量(KB). |
| S0C | survivor space 0的当前容量(KB). |
| S1CMX | survivor space 1的最大容量(KB). |
| S1C | survivor space 1的当前容量(KB). |
| ECMX | Eden space的最小容量(KB). |
| EC | Eden space的当前容量(KB). |
| YGC | Young generation的GC事件数 |
| FGC | Full GC事件的数量 |
- -gcold Old和Permanent Generation的统计信息
| 列 | 描述 |
|---|
| PC | permanent space的当前容量(KB). |
| PU | Permanent space的已用容量(KB). |
| OC | old space的当前容量(KB). |
| OU | old space的已用容量(KB). |
| YGC | young generation的GC事件数 |
| FGC | Full GC事件的数量 |
| FGCT | Full GC的时间 |
| GCT | 总计的垃圾回收时间 |
- -gcoldcapacity Old Generation的统计信息
| 列 | 描述 |
|---|
| OGCMN | old generation的最小容量(KB). |
| OGCMX | old generation的最大容量(KB). |
| OGC | old generation的当前容量(KB). |
| OC | old space的当前容量(KB). |
| YGC | young generation的GC事件数 |
| FGC | Full GC事件的数量 |
| FGCT | Full GC的时间 |
| GCT | 总计的垃圾回收时间 |
- -gcpermcapacity Permanent Generation的统计信息
| 列 | 描述 |
|---|
| PGCMN | permanent generation的最小容量(KB). |
| PGCMX | permanent generation的最大容量(KB). |
| PGC | permanent generation的当前容量(KB). |
| PC | permanent space的当前容量(KB). |
| YGC | young generation的GC事件数 |
| FGC | Full GC 事件的数量 |
| FGCT | Full GC的时间 |
| GCT | 总计的垃圾回收时间 |
- -compiler HotSpot即时(Just-In-Time)编译器的统计信息
| 列 | 描述 |
|---|
| Compiled | 已执行的编译任务数 |
| Failed | 失败的编译任务数 |
| Invalid | 无效的编译任务数 |
| Time | 执行编译任务所耗费的时间 |
| FailedType | 最后失败的编译的编译类型 |
| FailedMethod | 最后失败的编译的类名和方法 |
- -printcompilation HotSpot编译器方法统计
| 列 | 描述 |
|---|
| Compiled | 已执行的编译任务数 |
| Size | 方法字节码的字节数 |
| Type | 编译类型 |
| Method | 表示被编译方法的类名和方法名。类名使用"/"替代"."作为命名空间的分隔符。方法名是给定的类的方法。这两个字段的格式与HotSpot选项- XX:+PrintComplation是一致的。 |