JVM命令使用演示 这篇文章里演示了一些jvm命令的使用,跟着这个主题,写了:JVM命令之jstack深入讲解 和 JVM命令之jmap深入讲解 ,今天接着这条线具体介绍一下jstat命令的使用。
作用
JVM statistics Monitoring,用于监视虚拟机运行时状态信息的命令,它可以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
使用
依旧先看一下使用帮助~ ᐅ jstat -help
Usage: jstat -help|-options
jstat - [-t] [-h] [ []]
Definitions:
An option reported by the -options option
Virtual Machine Identifier. A vmid takes the following form:
[@[:]]
Where is the local vm identifier for the target
Java virtual machine, typically a process id; is
the name of the host running the target Java virtual machine;
and 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.
Number of samples between header lines.
Sampling interval. The following forms are allowed:
["ms"|"s"]
Where is an integer and the suffix specifies the units as
milliseconds("ms") or seconds("s"). The default units are "ms".
Number of samples to take before terminating.
-J Pass directly to the runtime system.
这里首先介绍一下 jstat - pid 后面跟0、1、2个参数的差别,举例说明:~ ᐅ jps
30054 Jps
29529 Launcher
28953
29530 SearchBusiestCPU
29295 RemoteMavenServer
~ ᐅ jstat -gcutil 29530 # 0个参数的时候直接输出一次当前情况
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
~ ᐅ jstat -gcutil 29530 1000 # 1个参数时这个参数代表间隔时间,一直输出
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
^C% ~ ᐅ jstat -gcutil 29530 1000 2 # 2个参数时第一个参数参数代表间隔时间,后一个参数代表输出的总次数
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
当然也支持-t,-h,直接看一下效果即可,不是特别的重要:~ ᐅ jstat -gcutil -t -h5 29530 1000
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
428.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
429.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
430.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
431.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
432.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
433.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
434.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
435.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
436.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
437.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
Timestamp S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
438.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
439.5 0.00 0.00 20.59 0.00 17.27 19.75 0 0.000 0 0.000 0.000
不同参数详细解释
jstat -options
可以列出当前JVM版本支持的选项,常见的有
l class (类加载器)
l compiler (JIT)
l gc (GC堆状态)
l gccapacity (各区大小)
l gccause (最近一次GC统计和原因)
l gcnew (新区统计)
l gcnewcapacity (新区大小)
l gcold (老区统计)
l gcoldcapacity (老区大小)
l gcpermcapacity (永久区大小)
l gcutil (GC统计汇总)
l printcompilation (HotSpot编译统计)
1、jstat –class : 显示加载class的数量,及所占空间等信息。显示列名具体描述
Loaded装载的类的数量
Bytes装载类所占用的字节数
Unloaded卸载类的数量
Bytes卸载类的字节数
Time装载和卸载类所花费的时间
2、jstat -compiler :显示VM实时编译的数量等信息。显示列名具体描述
Compiled编译任务执行数量
Failed编译任务执行失败数量
Invalid编译任务执行失效数量
Time编译任务消耗时间
FailedType最后一个编译失败任务的类型
FailedMethod最后一个编译失败任务所在的类及方法
3、jstat -gc : 可以显示gc的信息,查看gc的次数,及时间。
不同的版本有一定的差别,比如jdk8之后会有MC、MU等,代表Metaspace的容量(C)和已使用空间(U),下面其他参数也有相同的问题,注意识别对应的后缀即可。显示列名具体描述
S0C年轻代中第一个survivor(幸存区)的容量 (字节)
S1C年轻代中第二个survivor(幸存区)的容量 (字节)
S0U年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
EC年轻代中Eden(伊甸园)的容量 (字节)
EU年轻代中Eden(伊甸园)目前已使用空间 (字节)
OCOld代的容量 (字节)
OUOld代目前已使用空间 (字节)
PCPerm(持久代)的容量 (字节)
PUPerm(持久代)目前已使用空间 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
YGCT从应用程序启动到采样时年轻代中gc所用时间(s)
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)
4、jstat -gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小显示列名具体描述
NGCMN年轻代(young)中初始化(最小)的大小(字节)
NGCMX年轻代(young)的最大容量 (字节)
NGC年轻代(young)中当前的容量 (字节)
S0C年轻代中第一个survivor(幸存区)的容量 (字节)
S1C年轻代中第二个survivor(幸存区)的容量 (字节)
EC年轻代中Eden(伊甸园)的容量 (字节)
OGCMNold代中初始化(最小)的大小 (字节)
OGCMXold代的最大容量(字节)
OGCold代当前新生成的容量 (字节)
OCOld代的容量 (字节)
PGCMNperm代中初始化(最小)的大小 (字节)
PGCMXperm代的最大容量 (字节)
PGCperm代当前新生成的容量 (字节)
PCPerm(持久代)的容量 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
5、jstat -gcutil :统计gc信息显示列名具体描述
S0年轻代中第一个survivor(幸存区)已使用的占当前容量百分比
S1年轻代中第二个survivor(幸存区)已使用的占当前容量百分比
E年轻代中Eden(伊甸园)已使用的占当前容量百分比
Oold代已使用的占当前容量百分比
Pperm代已使用的占当前容量百分比
YGC从应用程序启动到采样时年轻代中gc次数
YGCT从应用程序启动到采样时年轻代中gc所用时间(s)
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)
6、jstat -gcnew :年轻代对象的信息。显示列名具体描述
S0C年轻代中第一个survivor(幸存区)的容量 (字节)
S1C年轻代中第二个survivor(幸存区)的容量 (字节)
S0U年轻代中第一个survivor(幸存区)目前已使用空间 (字节)
S1U年轻代中第二个survivor(幸存区)目前已使用空间 (字节)
TT持有次数限制
MTT最大持有次数限制
EC年轻代中Eden(伊甸园)的容量 (字节)
EU年轻代中Eden(伊甸园)目前已使用空间 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
YGCT从应用程序启动到采样时年轻代中gc所用时间(s)
7、jstat -gcnewcapacity : 年轻代对象的信息及其占用量。显示列名具体描述
NGCMN年轻代(young)中初始化(最小)的大小(字节)
NGCMX年轻代(young)的最大容量 (字节)
NGC年轻代(young)中当前的容量 (字节)
S0CMX年轻代中第一个survivor(幸存区)的最大容量 (字节)
S0C年轻代中第一个survivor(幸存区)的容量 (字节)
S1CMX年轻代中第二个survivor(幸存区)的最大容量 (字节)
S1C年轻代中第二个survivor(幸存区)的容量 (字节)
ECMX年轻代中Eden(伊甸园)的最大容量 (字节)
EC年轻代中Eden(伊甸园)的容量 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
8、jstat -gcold :old代对象的信息。显示列名具体描述
PCPerm(持久代)的容量 (字节)
PUPerm(持久代)目前已使用空间 (字节)
OCOld代的容量 (字节)
OUOld代目前已使用空间 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)
9、jstat -gcoldcapacity :old代对象的信息及其占用量。显示列名具体描述
OGCMNold代中初始化(最小)的大小 (字节)
OGCMXold代的最大容量(字节)
OGCold代当前新生成的容量 (字节)
OCOld代的容量 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)
10、jstat -gcpermcapacity: perm对象的信息及其占用量。显示列名具体描述
PGCMNperm代中初始化(最小)的大小 (字节)
PGCMXperm代的最大容量 (字节)
PGCperm代当前新生成的容量 (字节)
PCPerm(持久代)的容量 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)
11、jstat -printcompilation :当前VM执行的信息。显示列名具体描述
Compiled编译任务的数目
Size方法生成的字节码的大小
Type编译类型
Method类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的
关于jstat就主要介绍到这里,这个命令相对容易一些,关键是对结果的解读。这些结果也不需要刻意去背,能清楚的理解分代,找到缩写规律,自己单独看也是很容易的。