JDK命令-jstat

最后更新:2020-04-24

jstat(JVM Statistics Monitoring Tool)是用于监控虚拟机各种运行状态信息的命令行工具。他可以显示本地或远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形的服务器上,它是运行期定位虚拟机性能问题的首选工具。

    jstat -<option> [-t] [-h<lines>] <vmid> [<interval[s|ms]> [<count>]]

参数解释:

  • option — 选项,我们一般使用 -gcutil 查看gc情况
  • vmid — VM的进程号,即当前运行的java进程号
  • interval– 间隔时间,单位为秒或者毫秒
  • count — 打印次数,如果缺省则打印无数次

参数interval和count代表查询间隔和次数,如果省略这两个参数,说明只查询一次。假设需要每250毫秒查询一次进程5828垃圾收集状况,一共查询5次,那命令行如下:

jstat -gc 5828 250 5

对于命令格式中的VMID与LVMID需要特别说明下:如果是本地虚拟机进程,VMID(Virtual Machine IDentifier,虚机标识符)和LVMID(Local Virtual Machine IDentifier,虚机标识符)是一致的,如果是远程虚拟机进程,那VMID的格式应当是:[protocol:][//] lvmid [@hostname[:port]/servername]

参数

  • –class 监视类装载、卸载数量、总空间及类装载所耗费的时间
  • –gc 监视Java堆状况,包括Eden区、2个Survivor区、老年代、永久代等的容量
  • –gccapacity 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大和最小空间
  • –gcutil 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
  • –gccause 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因
  • –gcnew 监视新生代GC的状况
  • –gcnewcapacity 监视内容与-gcnew基本相同,输出主要关注使用到的最大和最小空间
  • –gcold 监视老年代GC的状况
  • –gcoldcapacity 监视内容与——gcold基本相同,输出主要关注使用到的最大和最小空间
  • –gcpermcapacity 输出永久代使用到的最大和最小空间
  • –compiler 输出JIT编译器编译过的方法、耗时等信息
  • –printcompilation 输出已经被JIT编译的方法

jstat -class 2730 60s 10

显示加载class的数量,及所占空间等信息。

	Loaded  Bytes  Unloaded  Bytes     Time   
	  4544  8669.2       58    66.1       2.61

说明

  • Loaded 装载的类的数量
  • Bytes 装载类所占用的字节数
  • Unloaded 卸载类的数量
  • Bytes 卸载类的字节数
  • Time 装载和卸载类所花费的时间

jstat -compiler 2730 60s 10

显示VM实时编译的数量等信息。

	Compiled Failed Invalid   Time   FailedType FailedMethod
	    7401      0       0    79.88          0 

说明

  • Compiled 编译任务执行数量
  • Failed 编译任务执行失败数量
  • Invalid 编译任务执行失效数量
  • Time 编译任务消耗时间
  • FailedType 最后一个编译失败任务的类型
  • FailedMethod 最后一个编译失败任务所在的类及方法

jstat -gc 2730 60s 10

可以显示gc的信息,查看gc的次数,及时间。

	 S0C    S1C    S0U    S1U      EC       EU        OC         OU       MC     MU    CCSC   CCSU   YGC     YGCT    FGC    FGCT     GCT   
	68096.0 13824.0  0.0   13742.4 475136.0 99054.4   220160.0   140781.6  28928.0 27994.3 3328.0 3121.6     33    2.192   2      0.613    2.805

说明

  • S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • EC 年轻代中Eden(伊甸园)的容量 (字节)
  • EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)
  • OC Old代的容量 (字节)
  • OU Old代目前已使用空间 (字节)
  • MC Klass Metaspace以及NoKlass Metaspace两者总共committed的内存大小,单位是KB
  • MU Klass Metaspace以及NoKlass Metaspace两者已经使用了的内存大小
  • CCSC Klass Metaspace的已经被commit的内存大小,单位也是KB
  • CCSU Klass Metaspace的已经被使用的内存大小
  • PC Perm(持久代)的容量 (字节)
  • PU Perm(持久代)目前已使用空间 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT 从应用程序启动到采样时gc用的总时间(s)

jstat -gccapacity 2730 60s 10

可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小

	 NGCMN    NGCMX     NGC     S0C   S1C       EC      OGCMN      OGCMX       OGC         OC       MCMN     MCMX      MC     CCSMN    CCSMX     CCSC    YGC    FGC 
	 84992.0 1356288.0 611328.0 68096.0 13824.0 475136.0   171008.0  2713088.0   220160.0   220160.0      0.0 1075200.0  28928.0      0.0 1048576.0   3328.0     33     2

说明

  • NGCMN 年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX 年轻代(young)的最大容量 (字节)
  • NGC 年轻代(young)中当前的容量 (字节)
  • S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
  • EC 年轻代中Eden(伊甸园)的容量 (字节)
  • OGCMN old代中初始化(最小)的大小 (字节)
  • OGCMX old代的最大容量(字节)
  • OGC old代当前新生成的容量 (字节)
  • OC Old代的容量 (字节)
  • PGCMN perm代中初始化(最小)的大小 (字节)
  • PGCMX perm代的最大容量 (字节)
  • PGC perm代当前新生成的容量 (字节)
  • PC Perm(持久代)的容量 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • FGC 从应用程序启动到采样时old代(全gc)gc次数

jstat -gcutil 2730

统计gc信息

	  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT   
	 82.79   0.00  60.96  63.95  96.83  93.80     34    2.285     2    0.613    2.898

说明

  • S0 年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
  • S1 年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
  • E 年轻代中Eden(伊甸园)已使用的占当前容量百分比
  • O old代已使用的占当前容量百分比
  • P perm代已使用的占当前容量百分比
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)
  • FGC 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT 从应用程序启动到采样时gc用的总时间(s)

jstat -gccause 2730

	  S0     S1     E      O      M     CCS    YGC     YGCT    FGC    FGCT     GCT    LGCC                 GCC                 
	 82.79   0.00  60.97  63.95  96.83  93.80     34    2.285     2    0.613    2.898 Allocation Failure   No GC 

The “Allocation Failure” message suggests there has been a request for memory, which has failed because the heap is full, which results in garbage collection kicking in to free up some memory to allow the allocation to work.

jstat -gcnew 2730

年轻代对象的信息。

	 S0C    S1C    S0U    S1U   TT MTT  DSS      EC       EU     YGC     YGCT  
	52736.0 69632.0 43662.4    0.0  5  15 69632.0 456704.0 287509.2     34    2.285

说明

  • S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
  • S0U 年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
  • S1U 年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
  • TT 持有次数限制
  • MTT 最大持有次数限制
  • EC 年轻代中Eden(伊甸园)的容量 (字节)
  • EU 年轻代中Eden(伊甸园)目前已使用空间 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • YGCT 从应用程序启动到采样时年轻代中gc所用时间(s)

jstat -gcnewcapacity 2730

年轻代对象的信息及其占用量

	  NGCMN      NGCMX       NGC      S0CMX     S0C     S1CMX     S1C       ECMX        EC      YGC   FGC 
	   84992.0  1356288.0   595968.0 452096.0  52736.0 452096.0  69632.0  1355264.0   456704.0    34     2

说明

  • NGCMN 年轻代(young)中初始化(最小)的大小(字节)
  • NGCMX 年轻代(young)的最大容量 (字节)
  • NGC 年轻代(young)中当前的容量 (字节)
  • S0CMX 年轻代中第一个survivor(幸存区)的最大容量 (字节)
  • S0C 年轻代中第一个survivor(幸存区)的容量 (字节)
  • S1CMX 年轻代中第二个survivor(幸存区)的最大容量 (字节)
  • S1C 年轻代中第二个survivor(幸存区)的容量 (字节)
  • ECMX 年轻代中Eden(伊甸园)的最大容量 (字节)
  • EC 年轻代中Eden(伊甸园)的容量 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • FGC 从应用程序启动到采样时old代(全gc)gc次数

jstat -gcold 2730

old代对象的信息

	   MC       MU      CCSC     CCSU       OC          OU       YGC    FGC    FGCT     GCT   
	 28928.0  28023.8   3328.0   3123.8    220160.0    140781.6     35     2    0.613    2.919

JDK1.8已经删除了持久代 说明

  • PC Perm(持久代)的容量 (字节)
  • PU Perm(持久代)目前已使用空间 (字节)
  • OC Old代的容量 (字节)
  • OU Old代目前已使用空间 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • FGC 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT 从应用程序启动到采样时gc用的总时间(s)

jstat -gcoldcapacity 2730

old代对象的信息及其占用量。

	   OGCMN       OGCMX        OGC         OC       YGC   FGC    FGCT     GCT   
	   171008.0   2713088.0    220160.0    220160.0    35     2    0.613    2.919

说明

  • OGCMN old代中初始化(最小)的大小 (字节)
  • OGCMX old代的最大容量(字节)
  • OGC old代当前新生成的容量 (字节)
  • OC Old代的容量 (字节)
  • YGC 从应用程序启动到采样时年轻代中gc次数
  • FGC 从应用程序启动到采样时old代(全gc)gc次数
  • FGCT 从应用程序启动到采样时old代(全gc)gc所用时间(s)
  • GCT 从应用程序启动到采样时gc用的总时间(s)

jstat -printcompilation 2730

	Compiled  Size  Type Method
	    7501    848    1 org/apache/zookeeper/ClientCnxnSocketNIO doTransport
  • Compiled 编译任务的数目
  • Size 方法生成的字节码的大小
  • Type 编译类型
  • Method 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
Edgar

Edgar
一个略懂Java的小菜比