jps、jstat命令

JDK本身提供了很多方便的JVM性能调优监控工具,除了集成式的VisualVM和jConsole外,但是在生产环境出现问题的时候,一方面工具的使用会有所限制,所有的工具几乎都是依赖于jdk的接口和底层的这些命令,研究这些命令的使用也让我们更能了解jvm构成和特性。

jps(JVM Process Status Tool,显示指定系统内所有的HotSpot虚拟机进程。)

   语法:

    jps [ options ] [ hostid ]

options 说明
-q 只输出进程ID
-m 输出JVM启动时传递给main()的参数
-l 输出主类全名或jar路径
-v 输出JVM启动时显示指定的JVM参数

参数详解:

-l、-m选项

 1 [root@node1 ~]# jps -l
 2 1640 org.apache.hadoop.hdfs.server.namenode.NameNode
 3 2752 sun.tools.jps.Jps
 4 1738 org.apache.hadoop.hdfs.server.datanode.DataNode
 5 1894 org.apache.hadoop.hdfs.qjournal.server.JournalNode
 6 
 7 [root@node1 ~]# jps -lm
 8 1640 org.apache.hadoop.hdfs.server.namenode.NameNode
 9 1738 org.apache.hadoop.hdfs.server.datanode.DataNode
10 1894 org.apache.hadoop.hdfs.qjournal.server.JournalNode
11 2840 sun.tools.jps.Jps -lm

jstat (JVM statistics Monitoring,虚拟机统计信息,以显示出虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。)

语法:

  jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]   

jstat支持两类选项:generalOption 通用选项 。outputOptions输出选项,这两类选项都是只能指定一个,但是输出选项可以在其后面添加-h、-t、-J选项

vmid 则是虚拟机的进程ID语法格式为:[protocol:] [//] lvmid [@hostname[:port]/servername],如果不指定协议和主机名,表示为本地协议。如果不指定协议,但是指定了主机名,则使用RMI( 远程方法调用(Remote Method Invocation))。

interval 和 count 表示输出间隔以及输出次数。

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

选项的具体用法

-class 监视类装载、卸载数量、总空间以及类装载所耗费的时间

$  jstat -class 3139
 Loaded    Bytes    Unloaded    Bytes    Time 
 7197    14779.4   0            0.0     101.46

Loaded :   加载class的数量
Bytes :    已加载class字节大小(KB)
Unloaded : 未加载class的数量
Bytes :    未加载class的字节大小(KB)
Time :     执行类加载和卸载的耗时

-compiler 输出JIT编译过的方法数量耗时等  

  $  jstat -compiler 4156
  Compiled   Failed   Invalid    Time    FailedType   FailedMethod
   3892      0      0      50.32            0

Compiled :该进程的编译数量

Failed :编译失败的数量

Invalid :无效的数量

Time :编译耗时

FailedType :失败类型

FailedMethod :编译失败的方法的完全限定名

-gc 垃圾回收堆的行为统计,常用命令

[root@node1 ~]# jstat -gc 3388
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
17024.0 17024.0 9785.1 0.0 136320.0 135795.6 878208.0 22770.7 41504.0 40773.0 4912.0 4780.8 4 1.967 4 0.301 2.268

S0C : survivor0区的总容量(kB)
S1C : survivor1区的总容量(kB)
S0U : survivor0区已使用的容量(kB)
S1U : survivor1区已使用的容量(kB)
EC : Eden区的总容量(kB)
EU : Eden区已使用的容量(kB)
OC : Old区的总容量(kB)
OU : Old区已使用的容量(kB)
MC:(Klass Metaspace以及NoKlass Metaspace)metaspace总共committed的内存大小,单位KB
MU:Klass Metaspace以及NoKlass Metaspace两者已经使用了的内存大小(kB)
CCSC:Klass Metaspace的已经被commit的内存大小,单位也是KB
CCSU: Klass Metaspace的已经被使用的内存大小(kB)
YGC : 新生代垃圾回收次数
YGCT : 新生代垃圾回收时间
FGC : 老年代垃圾回收次数
FGCT : 老年代垃圾回收时间
GCT : 垃圾回收总消耗时间
[root@node1 ~]# jstat -gc 1075 2000 3

每隔2000ms检查一次,共输出3次
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT 
17024.0 17024.0 0.0 1255.5 136320.0 38105.2 1035800.0 654520.4 147396.0 139128.4 19736.0 18572.2 2815 56.979 24 3.324 60.303
17024.0 17024.0 0.0 1255.5 136320.0 38132.0 1035800.0 654520.4 147396.0 139128.4 19736.0 18572.2 2815 56.979 24 3.324 60.303
17024.0 17024.0 0.0 1255.5 136320.0 43593.5 1035800.0 654520.4 147396.0 139128.4 19736.0 18572.2 2815 56.979 24 3.324 60.303

-gccapacity :会输出Java堆各区域使用到的最大、最小空间

[root@node1 ~]# jstat -gccapacity 1075
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC 
41600.0 170368.0 170368.0 17024.0 17024.0 136320.0 83328.0 4023936.0 1035800.0 1035800.0 0.0 1177600.0 147396.0 0.0 1048576.0 19736.0 2817 24

NGCMN : 新生代占用的最小空间
NGCMX : 新生代占用的最大空间
OGCMN : 老年代占用的最小空间
OGCMX : 老年代占用的最大空间
OGC:当前年老代的容量 (KB)
OC: 当前年老代的空间 (KB)
MCMN : 元空间最小分配内存(KB)
MCMX : 元空间最大分配内存(KB)
CCSMN: 压缩类空间最小分配内存(KB)
CCSMX: 压缩类空间最小分配内存(KB)
FGC:full gc次数

-gcutil :输出的是已使用空间占总空间的百分比

[root@node1 ~]# jstat -gcutil 1075
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT 
0.00 10.71 17.84 63.34 94.42 94.11 2851 57.579 24 3.324 60.904

-gccause:垃圾收集统计概述,附加最近两次垃圾回收事件的原因

[root@node1 ~]# jstat -gccause 1075
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC 
0.00 13.52 68.13 63.39 94.44 94.11 2853 57.612 24 3.324 60.937 Allocation Failure No GC

LGCC:最近垃圾回收的原因
GCC:当前垃圾回收的原因

-gcnew: 统计新生代的行为

[root@node1 ~]# jstat -gcnew 1075
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT 
17024.0 17024.0 0.0 2282.2 6 6 8512.0 136320.0 46848.3 2855 57.650

TT:Tenuring threshold(提升阈值)
MTT:最大的tenuring threshold
DSS:survivor区域大小 (KB)

-gcnewcapacity:新生代与其相应的内存空间的统计

[root@node1 ~]# jstat -gcnewcapacity 1075
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC 
41600.0 170368.0 170368.0 17024.0 17024.0 17024.0 17024.0 136320.0 136320.0 2857 24

NGC:当前年轻代的容量 (KB)
S0CMX:最大的S0空间 (KB)
S0C:当前S0空间 (KB)
ECMX:最大eden空间 (KB)
EC:当前eden空间 (KB)

-gcold :统计老年代的行为

[root@node1 ~]# jstat -gcold 1075
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 
147396.0 139195.6 19736.0 18572.7 1035800.0 657569.2 2864 24 3.324 61.137

[root@node1 ~]# jstat -gcold 1075
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT 
147396.0 139195.6 19736.0 18572.7 1035800.0 657569.2 2864 24 3.324 61.137

-gcmetacapacity:统计元数据容量

[root@node1 ~]# jstat -gcmetacapacity 1075
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT 
0.0 1177600.0 147396.0 0.0 1048576.0 19736.0 2868 24 3.324 61.208

-printcompilation :hotspot编译方法统计

[root@node1 ~]# jstat -printcompilation 1075
Compiled Size Type Method
29220 419 1 java/math/BigDecimal setScale

Compiled:被执行的编译任务的数量
Size:方法字节码的字节数
Type:编译类型
Method:编译方法的类名和方法名。类名使用”/” 代替 “.” 作为空间分隔符. 方法名是给出类的方法名. 格式是一致于HotSpot - XX:+PrintComplation 选项

 

原文地址:https://www.cnblogs.com/zh-dream/p/13603540.html