生产环境上的JVM监控,有时候不方便用可视化的工具来操作。
这里整理一下平常自己使用的JDK自带的一些常用工具。
jps
jps命令用于查询正在运行的JVM进程,
常用的参数为:
参数名 | 解释 |
---|---|
-q | 只输出LVMID,省略主类的名称 |
-m | 输出虚拟机进程启动时传给主类main()函数的参数 |
-l | 输出主类的全类名,如果进程执行的是Jar包,输出Jar路径 |
-v | 输出虚拟机进程启动时JVM参数 |
命令格式:jps [option] [hostid]
<br />[root@localhost bin]# jps -l
5657 backtype.storm.daemon.supervisor
5863 sun.tools.jps.Jps
5569 org.apache.zookeeper.server.quorum.QuorumPeerMain
5670 backtype.storm.ui.core
5632 backtype.storm.daemon.nimbus
jstat
jstat可以实时显示本地或远程JVM进程中类装载、内存、垃圾收集、JIT编译等数据(查看远程JVM信息需开启RMI支持)。
jstat常见参数:
参数名 | 解释 |
---|---|
-class | 监视类装载、卸载数量、总空间及类装载所耗费的时间 |
-gc | 监听Java堆状况,包括Eden区、两个Survivor区、老年代、永久代等的容量,以用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注java堆各个区域使用到的最大和最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内同与-gcnew基本相同,输出主要关注使用到的最大和最小空间 |
-gcold | 监视老年代GC情况 |
-gcoldcapacity | 监视内同与-gcold基本相同,输出主要关注使用到的最大和最小空间 |
-gcpermcapacity | 输出永久代使用到最大和最小空间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
命令格式:jstat [option vmid [interval[s|ms] [count]]]
vmid指jvm进程的id,如果省略interval和count,则只查询一次。
查看类装载的例子:
jstat -class : 显示加载class的数量,及所占空间等信息。
<br />[root@localhost ~]# jstat -class 5632
Loaded Bytes Unloaded Bytes Time
4932 10194.8 0 0.0 7.74
列名 | 解释 |
---|---|
Loaded | 装载的类的数量 |
Bytes | 装载类所占用的字节数 |
Unloaded | 卸载类的数量 |
Bytes | 卸载类的字节数 |
Time | 装载和卸载类所花费的时间 |
查看实时编译信息
jstat -compiler 显示VM实时编译的数量等信息。
<br />[root@localhost ~]# jstat -compiler 5632
Compiled Failed Invalid Time FailedType FailedMethod
399 0 0 4.40 0
列名 | 解释 |
---|---|
Compiled | 编译任务执行数量 |
Failed | 编译任务执行失败数量 |
Invalid | 编译任务执行失效数量 |
Time | 编译任务消耗时间 |
FailedType | 最后一个编译失败任务的类型 |
FailedMethod | 最后一个编译失败任务所在的类及方法 |
查看gc情况的例子:
jstat -gc : 可以显示gc的信息,查看gc的次数,及时间。
<br />[root@localhost ~]# jstat -gc 5632 1000 5
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
2560.0 2560.0 2548.0 0.0 65536.0 57516.0 41984.0 11561.3 24576.0 24373.0 4 0.132 0 0.000 0.132
2560.0 2560.0 2548.0 0.0 65536.0 57516.0 41984.0 11561.3 24576.0 24373.0 4 0.132 0 0.000 0.132
2560.0 2560.0 2548.0 0.0 65536.0 57516.0 41984.0 11561.3 24576.0 24373.0 4 0.132 0 0.000 0.132
2560.0 2560.0 2548.0 0.0 65536.0 57516.0 41984.0 11561.3 24576.0 24373.0 4 0.132 0 0.000 0.132
2560.0 2560.0 2548.0 0.0 65536.0 57516.0 41984.0 11561.3 24576.0 24373.0 4 0.132 0 0.000 0.132
列名 | 解释 |
---|---|
S0C | 年轻代中第一个survivor(幸存区)的容量 (字节) |
S1C | 年轻代中第二个survivor(幸存区)的容量 (字节) |
S0U | 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) |
S1U | 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) |
EC | 年轻代中Eden(伊甸园)的容量 (字节) |
EU | 年轻代中Eden(伊甸园)目前已使用空间 (字节) |
OC | Old代的容量 (字节) |
OU | Old代目前已使用空间 (字节) |
PC | Perm(持久代)的容量 (字节) |
PU | Perm(持久代)目前已使用空间 (字节) |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
查看gc占用情况
jstat -gccapacity :可以显示,VM内存中三代(young,old,perm)对象的使用和占用大小
<br />[root@localhost ~]# jstat -gccapacity 5632 1000 5
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
21504.0 349696.0 70656.0 2560.0 2560.0 65536.0 41984.0 698880.0 41984.0 41984.0 21504.0 83968.0 24576.0 24576.0 4 0
21504.0 349696.0 70656.0 2560.0 2560.0 65536.0 41984.0 698880.0 41984.0 41984.0 21504.0 83968.0 24576.0 24576.0 4 0
21504.0 349696.0 70656.0 2560.0 2560.0 65536.0 41984.0 698880.0 41984.0 41984.0 21504.0 83968.0 24576.0 24576.0 4 0
21504.0 349696.0 70656.0 2560.0 2560.0 65536.0 41984.0 698880.0 41984.0 41984.0 21504.0 83968.0 24576.0 24576.0 4 0
21504.0 349696.0 70656.0 2560.0 2560.0 65536.0 41984.0 698880.0 41984.0 41984.0 21504.0 83968.0 24576.0 24576.0 4 0
列名 | 解释 |
---|---|
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次数 |
统计gc信息
jstat -gcutil :统计gc信息
<br />[root@localhost ~]# jstat -gcutil 5632 1000 5
S0 S1 E O P YG YGCT FGC FGCT GCT
0.00 99.53 3.90 38.21 99.42 5 0.158 0 0.000 0.158
0.00 99.53 3.90 38.21 99.42 5 0.158 0 0.000 0.158
0.00 99.53 3.90 38.21 99.42 5 0.158 0 0.000 0.158
0.00 99.53 3.90 38.21 99.42 5 0.158 0 0.000 0.158
0.00 99.53 3.90 38.21 99.42 5 0.158 0 0.000 0.158
列名 | 解释 |
---|---|
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 -gcnew :年轻代对象的信息。
<br />[root@localhost ~]# jstat -gcnew 5632 1000 5
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
8192.0 2560.0 0.0 2548.0 6 15 8192.0 65536.0 6031.8 5 0.158
8192.0 2560.0 0.0 2548.0 6 15 8192.0 65536.0 6031.8 5 0.158
8192.0 2560.0 0.0 2548.0 6 15 8192.0 65536.0 6031.8 5 0.158
8192.0 2560.0 0.0 2548.0 6 15 8192.0 65536.0 6031.8 5 0.158
8192.0 2560.0 0.0 2548.0 6 15 8192.0 65536.0 6031.8 5 0.158
列名 | 解释 |
---|---|
S0C | 年轻代中第一个survivor(幸存区)的容量 (字节) |
S1C | 年轻代中第二个survivor(幸存区)的容量 (字节) |
S0U | 年轻代中第一个survivor(幸存区)目前已使用空间 (字节) |
S1U | 年轻代中第二个survivor(幸存区)目前已使用空间 (字节) |
TT | 持有次数限制 |
MTT | 最大持有次数限制 |
EC | 年轻代中Eden(伊甸园)的容量 (字节) |
EU | 年轻代中Eden(伊甸园)目前已使用空间 (字节) |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
YGCT | 从应用程序启动到采样时年轻代中gc所用时间(s) |
查询年轻代对象信息及其占用量
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次数 |
查询old对象信息
jstat -gcold :old代对象的信息。
列名 | 解释 |
---|---|
PC | Perm(持久代)的容量 (字节) |
PU | Perm(持久代)目前已使用空间 (字节) |
OC | Old代的容量 (字节) |
OU | Old代目前已使用空间 (字节) |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
查询old代对象信息和占用量
jstat -gcoldcapacity : old代对象的信息及其占用量。
列名 | 解释 |
---|---|
OGCMN | old代中初始化(最小)的大小 (字节) |
OGCMX | old代的最大容量(字节) |
OGC | old代当前新生成的容量 (字节) |
OC | Old代的容量 (字节) |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
查询perm代对象信息和占用
jstat -gcpermcapacity: perm对象的信息及其占用量。
列名 | 解释 |
---|---|
PGCMN | perm代中初始化(最小)的大小 (字节) |
PGCMX | perm代的最大容量 (字节) |
PGC | perm代当前新生成的容量 (字节) |
PC | Perm(持久代)的容量 (字节) |
YGC | 从应用程序启动到采样时年轻代中gc次数 |
FGC | 从应用程序启动到采样时old代(全gc)gc次数 |
FGCT | 从应用程序启动到采样时old代(全gc)gc所用时间(s) |
GCT | 从应用程序启动到采样时gc用的总时间(s) |
查询VM执行的信息
jstat -printcompilation :当前VM执行的信息。
列名 | 解释 |
---|---|
Compiled | 编译任务的数目 |
Size | 方法生成的字节码的大小 |
Type | 编译类型 |
Method | 类名和方法名用来标识编译的方法。类名使用/做为一个命名空间分隔符。方法名是给定类中的方法。上述格式是由-XX:+PrintComplation选项进行设置的 |
原文链接:JDK命令行工具相关整理(1),转载请注明来源!