首页 » 语言&开发 » Java » JDK命令行工具相关整理(1)

JDK命令行工具相关整理(1)

 

生产环境上的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(伊甸园)目前已使用空间 (字节)
OCOld代的容量 (字节)
OUOld代目前已使用空间 (字节)
PCPerm(持久代)的容量 (字节)
PUPerm(持久代)目前已使用空间 (字节)
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(伊甸园)的容量 (字节)
OGCMNold代中初始化(最小)的大小 (字节)
OGCMXold代的最大容量(字节)
OGCold代当前新生成的容量 (字节)
OCOld代的容量 (字节)
PGCMNperm代中初始化(最小)的大小 (字节)
PGCMXperm代的最大容量 (字节)
PGCperm代当前新生成的容量 (字节)
PCPerm(持久代)的容量 (字节)
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(伊甸园)已使用的占当前容量百分比
Oold代已使用的占当前容量百分比
Pperm代已使用的占当前容量百分比
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代对象的信息。

列名解释
PCPerm(持久代)的容量 (字节)
PUPerm(持久代)目前已使用空间 (字节)
OCOld代的容量 (字节)
OUOld代目前已使用空间 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)

查询old代对象信息和占用量

jstat -gcoldcapacity : old代对象的信息及其占用量。

列名解释
OGCMNold代中初始化(最小)的大小 (字节)
OGCMXold代的最大容量(字节)
OGCold代当前新生成的容量 (字节)
OCOld代的容量 (字节)
YGC从应用程序启动到采样时年轻代中gc次数
FGC从应用程序启动到采样时old代(全gc)gc次数
FGCT从应用程序启动到采样时old代(全gc)gc所用时间(s)
GCT从应用程序启动到采样时gc用的总时间(s)

查询perm代对象信息和占用

jstat -gcpermcapacity: perm对象的信息及其占用量。

列名解释
PGCMNperm代中初始化(最小)的大小 (字节)
PGCMXperm代的最大容量 (字节)
PGCperm代当前新生成的容量 (字节)
PCPerm(持久代)的容量 (字节)
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),转载请注明来源!

0