jstat - 虚拟机统计信息监视工具

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 ):

  1. NGCMN — 新生代最小容量
  2. NGCMX — 新生代最大容量
  3. NGC — 新生代当前容量
  4. TT — 对象在新生代存活的次数
  5. MTT — 对象在新生代存活的最大次数
  6. DSS — 期望的幸存区大小
  7. S0CMX — 第 1 个幸存区占用的最大空间
  8. S0C — 第 1 个幸存区大小
  9. S0U — 第 1 个幸存区已使用大小
  10. S0 — 第 1 个幸存区已使用空间的百分比
  11. S1CMX — 第 2 个幸存区占用的最大空间
  12. S1C — 第 2 个幸存区大小
  13. S1U — 第 2 个幸存区已使用大小
  14. S1 — 第 2 个幸存区已使用空间的百分比
  15. ECMX — 伊甸园区占用的最大空间
  16. EC — 伊甸园区大小
  17. EU — 伊甸园区已使用大小
  18. E — 伊甸园区已使用空间的百分比
  19. OGCMN — 老年代最小容量
  20. OGCMX — 老年代最大容量
  21. OGC — 老年代当前容量
  22. OC — 老年代当前大小
  23. OU — 老年代已使用大小
  24. O — 老年代已使用空间的百分比
  25. MCMN — 元空间最小容量
  26. MCMX — 元空间最大容量
  27. MC — 元空间当前容量
  28. MU — 元空间已使用大小
  29. M — 元空间已使用空间的百分比
  30. CCSMN — 压缩类空间最小容量
  31. CCSMX — 压缩类空间最大容量
  32. CCSC — 压缩类空间当前容量
  33. CCSU — 压缩类空间已使用大小
  34. CCS — 压缩类空间已使用空间的百分比
  35. YGC — 从应用程序启动到采样时发生 Young GC 的次数
  36. YGCT – 从应用程序启动到采样时 Young GC 所用的时间(单位秒)
  37. FGC — 从应用程序启动到采样时发生 Full GC 的次数
  38. FGCT – 从应用程序启动到采样时 Full GC 所用的时间(单位秒)
  39. GCT — 从应用程序启动到采样时用于垃圾回收的总时间(单位秒)
  40. LGCC — 上一次垃圾回收的原因
  41. GCC — 当前垃圾回收的原因

文章摘自《深入理解Java虚拟机》第二版 周志明著,仅作为学习记录,书籍中用到的案例代码及描述有部分修改,但未改变原意。