jstat(JVM Statistics Monitoring Tool)是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT 编译等运行数据。
我们可以通过 jstat -help
查看 jstat 的命令格式:
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:
<lvmid>[@<hostname>[:<port>]]
Where <lvmid> is the local vm identifier for the target
Java virtual machine, typically a process id; <hostname> is
the name of the host running the target Java virtual machine;
and <port> is the port number for the rmiregistry on the
target host. See the jvmstat documentation for a more complete
description of the Virtual Machine Identifier.
<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:
<n>["ms"|"s"]
Where <n> is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
其中 vmid 的格式为 <lvmid>[@<hostname>[:<port>]]
,interval 和 count 代表查询间隔和次数,如果省略这两个参数,说明只查询一次。例如 jstat -gc 12345 5s
为每隔 5 秒查询一次进程 12345 的垃圾收集情况,jstat -gc 12345 800ms
为间隔 800 毫秒,jstat -gc 12345 5s 20
为每 5 秒查询一次,共查询 20 次。通过 jstat -options
可以看到当前虚拟机支持的所有 option 列表:
-class //监视类装载、卸载数量、总空间及类装载所耗费的时间
-compiler //输出 JIT 编译器编译过的方法、耗时等信息
-gc //监视 java 堆状况,包括 Eden 区,两个 survivor 区、老年代、元空间等的容量、已用空间、gc 时间合计等信息
-gccapacity //监视内容与 -gc 基本相同,但输出主要关注 java 堆各个区域使用到的最大最小空间
-gccause //与 -gcutil 功能一样,但是会额外输出导致上一次 gc 产生的原因
-gcmetacapacity //输出元空间使用到的最大、最小空间
-gcnew //监视新生代 gc 状况
-gcnewcapacity //监视内容与 -gcnew 基本相同,输出主要关注使用到的最大、最小空间
-gcold //监视新生代 gc 状况
-gcoldcapacity //监视内容与 -gcold 基本相同,输出主要关注使用到的最大、最小空间
-gcutil //监视内容与 -gc 基本相同,但输出主要关注已使用空间占总空间的百分比
-printcompilation //输出已被 JIT 编译的方法
另外,这里整理下各选项输出的含义( jdk 1.8.0_91 ):
- NGCMN — 新生代最小容量
- NGCMX — 新生代最大容量
- NGC — 新生代当前容量
- TT — 对象在新生代存活的次数
- MTT — 对象在新生代存活的最大次数
- DSS — 期望的幸存区大小
- S0CMX — 第 1 个幸存区占用的最大空间
- S0C — 第 1 个幸存区大小
- S0U — 第 1 个幸存区已使用大小
- S0 — 第 1 个幸存区已使用空间的百分比
- S1CMX — 第 2 个幸存区占用的最大空间
- S1C — 第 2 个幸存区大小
- S1U — 第 2 个幸存区已使用大小
- S1 — 第 2 个幸存区已使用空间的百分比
- ECMX — 伊甸园区占用的最大空间
- EC — 伊甸园区大小
- EU — 伊甸园区已使用大小
- E — 伊甸园区已使用空间的百分比
- OGCMN — 老年代最小容量
- OGCMX — 老年代最大容量
- OGC — 老年代当前容量
- OC — 老年代当前大小
- OU — 老年代已使用大小
- O — 老年代已使用空间的百分比
- MCMN — 元空间最小容量
- MCMX — 元空间最大容量
- MC — 元空间当前容量
- MU — 元空间已使用大小
- M — 元空间已使用空间的百分比
- CCSMN — 压缩类空间最小容量
- CCSMX — 压缩类空间最大容量
- CCSC — 压缩类空间当前容量
- CCSU — 压缩类空间已使用大小
- CCS — 压缩类空间已使用空间的百分比
- YGC — 从应用程序启动到采样时发生 Young GC 的次数
- YGCT – 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
- FGC — 从应用程序启动到采样时发生 Full GC 的次数
- FGCT – 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
- GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
- LGCC — 上一次垃圾回收的原因
- GCC — 当前垃圾回收的原因
文章摘自《深入理解Java虚拟机》第二版 周志明著,仅作为学习记录,书籍中用到的案例代码及描述有部分修改,但未改变原意。