1、jstat
jstat是一个极强的监视JVM的工具,可以用来监视JVM的各种堆和非堆的大小以及内存使用量。
Usage: jstat -help|-options
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
jstat的常用用法如图所示,jstat对应两种操作。
一是:jstat -help可以查看jstat的使用说明。
[root@iZuf68iyy7ylg8wcvkpzq6Z ~]# jstat -help
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.
jstat -options是jstat对应的操作选项。
[root@iZuf68iyy7ylg8wcvkpzq6Z ~]# jstat -options
-class
-compiler
-gc
-gccapacity
-gccause
-gcmetacapacity
-gcnew
-gcnewcapacity
-gcold
-gcoldcapacity
-gcutil
-printcompilation
另一种是jstat -option 执行某一个具体的操作。参数说明如下:
1、option:对应的参数选项,jstat -options输出的结果
2、-t:可以在打印的列上添加事件戳,用户显示系统的运行时间。
3、-h:可以在周期性打印数据的时候,在指定输出多少行之后,打印一次表头。
4、vmid:进程ID(PID)
5、interval:指定执行的每次间隔事件,单位为毫秒。
6、count:用于指定打印多少记录,缺省则会一直打印。
jstat -option中的option可以从options中选择。
1、-class:显示ClassLoader相关的信息。
2、-compiler:显示JIT编译相关的信息。
3、-gc:显示和GC相关的信息。
4、-gccapacity:显示各个代的容量以及使用情况。
5、-gcmetacapacity:显示元数据空间(metaspace)的大小。
6、-gcnew:显示新生代的信息。
7、-gcnewcapacity:显示新生代的大小以及使用情况。
8、-gcold:显示老年代的信息。
9、-gcoldcapacity:显示老年代的大小以及使用情况。
10、-gcutil:显示垃圾收集信息。
11、printcompilation:输出JIT编译的方法信息。
1.1、-class
显示加载class的数量,以及所占空间等信息。
jstat -class <pid>
1、Loaded:已经装载的类数量
2、Bytes:装载类所占用的字节数
3、Unloaded:未加载的类数量
4、Bytes:未加载的字节数
5、Time:装载类所花费的时间
1.2、-compiler
编译统计
jstat -compiler <pid>
1、Compiled:编译数量
2、Failed:失败数量
3、Invalid:不可用数量
4、Time:编译花费的事假
5、FailedType:最新一次编译失败的类型
6、FailedMethod:最新一次编译失败的类名和方法
1.3、-gc
显示GC相关的堆信息,查看GC的次数及时间
jstat -gc <pid>
1、S0C:年轻代中第一个survivor(幸存区)的容量(字节)
2、S1C:年轻代中第二个survivor(幸存区)的容量(字节)
3、S0U:年轻代中第一个survivor(幸存区)目前已使用空间(字节)
4、S1U:年轻代中第二个survivir(幸存区)目前使用的空间(字节)
5、EC:年轻代中Eden(伊甸园)的容量(字节)
6、EU:年轻代中Eden(伊甸园)目前已使用空间(字节)
7、OC:Old代的容量(字节)
8、OU:Old代目前已使用空间(字节)
9、MC:metaspace(元空间)的容量(字节)
10、MU:metaspace(元空间)目前已使用的容量(字节)
11、YGC:从程序启动到采样年轻代中gc次数
12、YGCT:从程序启动到采样年轻代中gc所用时间(s)
13、FGC:从程序启动到采样时old代(全gc)次数
14、FGCT:从程序启动到采样时old代(全gc)gc所用时间(s)
15、GCT:从程序启动到采样时gc用的总时间(s)
16、PC:永久代(perm)的容量(字节)
17、PU:永久代(perm)目前已使用容量(字节)
1.4、-gccapacity
显示JVM中三代(young、old、perm)对象的使用和占用大小
jstat -gccapacity <pid>
1、NGCMN:年轻代(young)中初始化(最小)的大小(字节)
2、NGCMX:年轻代(young)中最大的容量(字节)
3、NGC:年轻代(young)中当前容量大小(字节)
4、S0C:年轻代中第一个survivor(幸存区)的容量(字节)
5、S1C:年轻代中第二个survivor(幸存区)的容量(字节)
6、OGCMN:old代中初始化(最小)的大小(字节)
7、OGCMX:old代中最大容量(字节)
8、OGC:当前old代容量大小(字节)
9、OC:当前old代容量大小(字节)
10、MCMN:metaspace(元空间)初始化(最小)容量(字节)
11、MCMX:metaspace(元空间)最大容量(字节)
12、MC:当前元空间大小(字节)
13、CCSMN:最小压缩类空间大小
14、CCSMX:最大压缩类空间大小
15、CCSC:当前压缩类空间大小
16、YGC:从应用程序启动到采样时YGC发生次数
17、FGC:从应用程序启动到采用时FGC发生次数
1.5、-gcmetacapacity
metaspace中对象的信息及占有量
jstat -gcmetacapacity <pid>
1、MCMN:metaspace(元空间)初始(最小)容量(字节)
2、MCMX:metaspcae(元空间)最大容量(字节)
3、MC:元空间当前容量
4、CCSMN:最小压缩类空间大小
5、CCSMX:最大压缩类空间大小
6、CCSC:当前压缩类空间大小
7、YGC:从应用启动到采样年轻代GC次数
8、FGC:从应用启动到采样全GC次数
9、FGCT:从应用启动到采样全GC时间(s)
10、GCT:从应用启动到采样GC用的总时间(s)
1.6、-gcnew
显示年轻代对象的信息
jstat -gcnew <pid>
1、S0C:年轻代中第一个survivor(幸存区)的容量(字节)
2、S1C:年轻代中第二个survivor(幸存区)的容量(字节)
3、S0U:年轻代中第一个survivor(幸存区)目前已使用空间(字节)
4、S1U:年轻代中第二个survivir(幸存区)目前使用的空间(字节)
5、TT:持有次数限制
6、MTT:最大持有次数限制
7、DSS:期望的幸存区大小
8、EC:年轻代中eden(伊甸园)中容量大小
9、EU:年轻代中eden(伊甸园)目前已使用空间
10、YGC:从应用启动到采样年轻代GC次数
11、YGCT:从应用启动到采样年轻代GC时间(s)
1.7、-gcnewcapacity
年轻代对象信息及占用
jstat -gcnewcapacity <pid>
1、NGCMN:年轻代中初始化(最小)的大小
2、NGCMX:年轻代中最大容量大小
3、NGC:年轻代中当前容量大小
4、S0CMX:年轻代中第一个suvivor(幸存区)最大容量(字节)
5、S0C:年轻代中第一个suvivor(幸存区)当前大小
6、S1CMX:年轻代中第二个suvivor(幸存区)最大容量大小
7、S1C:年轻代中第二个suvivor(幸存区)当前容量大小
8、ECMX:年轻代中eden(伊甸园)最大容量
9、EC:年轻代中eden(伊甸园)的当前容量
10、YGC:从应用程序启动到采样youngGC次数
11、FGC:从应用程序启动到采样全GC次数
1.8、-gcold
old代对象信息
jstat -gcold <pid>
1、MC:metaspace容量大小
2、MU:metaspace当前已使用容量
3、CCSC:压缩类空间大小
4、CCSU:压缩类空间已使用大小
5、OC:old代容量大小
6、OU:old代已使用容量
7、YGC:从应用程序启动到采用younggc次数
8、FGC:从应用启动到采样全GC次数
9、FGCT:从应用启动到采样全GC时间(s)
10、GCT:从应用启动到采样GC用的总时间(s)
1.9、-gcoldcapacity
old代中对象信息及占有量
jstat -gcoldcapacity <pid>
1、OGCMN:old代初始化(最小)容量
2、OGCMX:old代最大容量大小
3、OGU:old代当前新生成容量大小
4、OC:old代的容量
5、YGC:从应用程序启动到采用younggc次数
6、FGC:从应用启动到采样全GC次数
7、FGCT:从应用启动到采样全GC时间(s)
8、GCT:从应用启动到采样GC用的总时间(s)
1.10、-gcutil
统计GC信息
jstat -gcutil <pid>
1、S0:年轻代中第一个suvivor已使用容量占当前容量百分比
2、S1:年轻代中第二个suvivor已使用容量占当前容量百分比
3、E:年轻代中eden已使用容量占当前容量的百分比
4、O:老年代中已使用容量占当前容量的百分比
5、M:metaspace已使用容量占当前容量的百分比
6、CCS:压缩类空间已使用容量占当前容量的百分比
7、YGC:从应用程序启动到采用younggc次数
8、YGCT:从应用程序启动到采用youngGC所用时间(s)
9、FGC:从应用启动到采样全GC次数
10、FGCT:从应用启动到采样全GC时间(s)
11、GCT:从应用启动到采样GC用的总时间(s)
1.11、-gccause
显示垃圾回收的相关信息(同-gcutil),同时显示最后一次和当前正在发生GC的原因
jstat -gccause <pid>
1、LGCC:最后一次GC的原因(No GC表示没有发生GC)
2、GCC:正在发生的GC的原因(No GC表示没有发生GC)