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 选项
posted on 2020-09-02 19:20 hopeless-dream 阅读(360) 评论(0) 编辑 收藏 举报