关于java:jvm-性能调优工具之-jstat-命令详解

48次阅读

共计 7729 个字符,预计需要花费 20 分钟才能阅读完成。

Jstat 名称:Java Virtual Machine statistics monitoring tool

官网文档:
https://docs.oracle.com/javas…

性能形容:

Jstat 是 JDK 自带的一个轻量级小工具。它位于 java 的 bin 目录下,次要利用 JVM 内建的指令对 Java 应用程序的资源和性能进行实时的命令行的监控,包含了对 Heap size 和垃圾回收情况的监控。

命令用法:jstat [- 命令选项] [vmid] [间隔时间 / 毫秒] [查问次数]
留神:应用的 jdk 版本是 jdk8。

C:\Users\Administrator>jstat -help
Usage: jstat -help|-options

   jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]

Definitions:
<option> An option reported by the -options option
<vmid> Virtual Machine Identifier. A vmid takes the following form:

                 <lvmid>[@<hostname>[:<port>]]
            Where <lvmid> is the local vm identifier for the target
            Java virtual machine, typically a process id; <hostname> is
            the name of the host running the target Java virtual machine;
            and <port> 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.

<lines> Number of samples between header lines.
<interval> Sampling interval. The following forms are allowed:

                <n>["ms"|"s"]
            Where <n> is an integer and the suffix specifies the units as
            milliseconds("ms") or seconds("s"). The default units are "ms".

<count> Number of samples to take before terminating.
-J<flag> Pass <flag> directly to the runtime system.
option:参数选项
-t:能够在打印的列加上 Timestamp 列,用于显示零碎运行的工夫
-h:能够在周期性数据输入的时候,指定输入多少行当前输入一次表头
vmid:Virtual Machine ID(过程的 pid)
interval:执行每次的间隔时间,单位为毫秒
count:用于指定输入多少次记录,缺省则会始终打印
option 能够从上面参数中抉择

jstat -options

-class 用于查看类加载状况的统计
-compiler 用于查看 HotSpot 中即时编译器编译状况的统计
-gc 用于查看 JVM 中堆的垃圾收集状况的统计
-gccapacity 用于查看新生代、老生代及长久代的存储容量状况
-gcmetacapacity 显示 metaspace 的大小
-gcnew 用于查看新生代垃圾收集的状况
-gcnewcapacity 用于查看新生代存储容量的状况
-gcold 用于查看老生代及长久代垃圾收集的状况
-gcoldcapacity 用于查看老生代的容量
-gcutil 显示垃圾收集信息
-gccause 显示垃圾回收的相干信息(通 -gcutil), 同时显示最初一次仅以后正在产生的垃圾收集的起因
-printcompilation 输入 JIT 编译的办法信息
示例:

1.-class 类加载统计

[root@hadoop ~]# jps #先通过 jps 获取到 java 过程号(这里是一个 zookeeper 过程)
3346 QuorumPeerMain
7063 Jps
[root@hadoop ~]# jstat -class 3346 #统计 JVM 中加载的类的数量与 size
Loaded Bytes Unloaded Bytes Time
1527 2842.7 0 0.0 1.02
Loaded: 加载类的数量
Bytes:加载类的 size,单位为 Byte
Unloaded:卸载类的数目
Bytes:卸载类的 size,单位为 Byte
Time:加载与卸载类破费的工夫
2.-compiler 编译统计

[root@hadoop ~]# jstat -compiler 3346 #用于查看 HotSpot 中即时编译器编译状况的统计
Compiled Failed Invalid Time FailedType FailedMethod

 404      0       0     0.19          0 

Compiled:编译工作执行数量
Failed:编译工作执行失败数量
Invalid:编译工作执行生效数量
Time:编译工作耗费工夫
FailedType:最初一个编译失败工作的类型
FailedMethod:最初一个编译失败工作所在的类及办法
3.-gc 垃圾回收统计

[root@hadoop ~]# jstat -gc 3346 #用于查看 JVM 中堆的垃圾收集状况的统计
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
128.0 128.0 0.0 128.0 1024.0 919.8 15104.0 2042.4 8448.0 8130.4 1024.0 996.0 7 0.019 0 0.000 0.019
S0C:年老代中第一个 survivor(幸存区)的容量(字节)
S1C:年老代中第二个 survivor(幸存区)的容量 (字节)
S0U:年老代中第一个 survivor(幸存区)目前已应用空间 (字节)
S1U:年老代中第二个 survivor(幸存区)目前已应用空间 (字节)
EC:年老代中 Eden(伊甸园)的容量 (字节)
EU:年老代中 Eden(伊甸园)目前已应用空间 (字节)
OC:Old 代的容量 (字节)
OU:Old 代目前已应用空间 (字节)
MC:metaspace(元空间) 的容量 (字节)
MU:metaspace(元空间)目前已应用空间 (字节)
CCSC:以后压缩类空间的容量 (字节)
CCSU:以后压缩类空间目前已应用空间 (字节)
YGC:从应用程序启动到采样时年老代中 gc 次数
YGCT:从应用程序启动到采样时年老代中 gc 所用工夫(s)
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用工夫(s)
GCT:从应用程序启动到采样时 gc 用的总工夫(s)
4.-gccapacity 堆内存统计

[root@hadoop ~]# jstat -gccapacity 3346 #用于查看新生代、老生代及长久代的存储容量状况
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
[root@hadoop ~]# jstat -gccapacity -h5 3346 1000 #-h5:每 5 行显示一次表头 1000:每 1 秒钟显示一次,单位为毫秒
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
1280.0 83264.0 1280.0 128.0 128.0 1024.0 15104.0 166592.0 15104.0 15104.0 0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 7 0
NGCMN:年老代(young) 中初始化 (最小) 的大小 (字节)
NGCMX:年老代(young) 的最大容量 (字节)
NGC:年老代 (young) 中以后的容量 (字节)
S0C:年老代中第一个 survivor(幸存区)的容量 (字节)
S1C:年老代中第二个 survivor(幸存区)的容量 (字节)
EC:年老代中 Eden(伊甸园)的容量 (字节)
OGCMN:old 代中初始化 (最小) 的大小 (字节)
OGCMX:old 代的最大容量 (字节)
OGC:old 代以后新生成的容量 (字节)
OC:Old 代的容量 (字节)
MCMN:metaspace(元空间) 中初始化 (最小) 的大小 (字节)
MCMX:metaspace(元空间)的最大容量 (字节)
MC:metaspace(元空间)以后新生成的容量 (字节)
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:以后压缩类空间大小
YGC:从应用程序启动到采样时年老代中 gc 次数
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
5.-gcmetacapacity 元数据空间统计

[root@hadoop ~]# jstat -gcmetacapacity 3346 #显示元数据空间的大小
MCMN MCMX MC CCSMN CCSMX CCSC YGC FGC FGCT GCT
0.0 1056768.0 8448.0 0.0 1048576.0 1024.0 8 0 0.000 0.020
MCMN:最小元数据容量
MCMX:最大元数据容量
MC:以后元数据空间大小
CCSMN:最小压缩类空间大小
CCSMX:最大压缩类空间大小
CCSC:以后压缩类空间大小
YGC:从应用程序启动到采样时年老代中 gc 次数
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用工夫(s)
GCT:从应用程序启动到采样时 gc 用的总工夫(s)
6.-gcnew 新生代垃圾回收统计

[root@hadoop ~]# jstat -gcnew 3346 #用于查看新生代垃圾收集的状况
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
128.0 128.0 67.8 0.0 1 15 64.0 1024.0 362.2 8 0.020
S0C:年老代中第一个 survivor(幸存区)的容量 (字节)
S1C:年老代中第二个 survivor(幸存区)的容量 (字节)
S0U:年老代中第一个 survivor(幸存区)目前已应用空间 (字节)
S1U:年老代中第二个 survivor(幸存区)目前已应用空间 (字节)
TT:持有次数限度
MTT:最大持有次数限度
DSS:冀望的幸存区大小
EC:年老代中 Eden(伊甸园)的容量 (字节)
EU:年老代中 Eden(伊甸园)目前已应用空间 (字节)
YGC:从应用程序启动到采样时年老代中 gc 次数
YGCT:从应用程序启动到采样时年老代中 gc 所用工夫(s)
7.-gcnewcapacity 新生代内存统计

[root@hadoop ~]# jstat -gcnewcapacity 3346 #用于查看新生代存储容量的状况
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
1280.0 83264.0 1280.0 8320.0 128.0 8320.0 128.0 66624.0 1024.0 8 0
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.-gcold 老年代垃圾回收统计

[root@hadoop ~]# jstat -gcold 3346 #用于查看老年代及长久代垃圾收集的状况
MC MU CCSC CCSU OC OU YGC FGC FGCT GCT
8448.0 8227.5 1024.0 1003.7 15104.0 2102.2 8 0 0.000 0.020
MC:metaspace(元空间) 的容量 (字节)
MU:metaspace(元空间)目前已应用空间 (字节)
CCSC:压缩类空间大小
CCSU:压缩类空间应用大小
OC:Old 代的容量 (字节)
OU:Old 代目前已应用空间 (字节)
YGC:从应用程序启动到采样时年老代中 gc 次数
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用工夫(s)
GCT:从应用程序启动到采样时 gc 用的总工夫(s)
9.-gcoldcapacity 老年代内存统计

[root@hadoop ~]# jstat -gcoldcapacity 3346 #用于查看老年代的容量
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
15104.0 166592.0 15104.0 15104.0 8 0 0.000 0.020
OGCMN:old 代中初始化(最小) 的大小 (字节)
OGCMX:old 代的最大容量(字节)
OGC:old 代以后新生成的容量 (字节)
OC:Old 代的容量 (字节)
YGC:从应用程序启动到采样时年老代中 gc 次数
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用工夫(s)
GCT:从应用程序启动到采样时 gc 用的总工夫(s)
10.-gcutil 垃圾回收统计

[root@hadoop ~]# jstat -gcutil 3346 #显示垃圾收集信息
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 42.10 13.92 97.39 98.02 8 0.020 0 0.000 0.020
S0:年老代中第一个 survivor(幸存区)已应用的占以后容量百分比
S1:年老代中第二个 survivor(幸存区)已应用的占以后容量百分比
E:年老代中 Eden(伊甸园)已应用的占以后容量百分比
O:old 代已应用的占以后容量百分比
M:元数据区已应用的占以后容量百分比
CCS:压缩类空间已应用的占以后容量百分比
YGC:从应用程序启动到采样时年老代中 gc 次数
YGCT:从应用程序启动到采样时年老代中 gc 所用工夫(s)
FGC:从应用程序启动到采样时 old 代(全 gc)gc 次数
FGCT:从应用程序启动到采样时 old 代(全 gc)gc 所用工夫(s)
GCT:从应用程序启动到采样时 gc 用的总工夫(s)
11.-gccause

[root@hadoop ~]# jstat -gccause 3346 #显示垃圾回收的相干信息(通 -gcutil), 同时显示最初一次或以后正在产生的垃圾回收的诱因
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT LGCC GCC
52.97 0.00 46.09 13.92 97.39 98.02 8 0.020 0 0.000 0.020 Allocation Failure No GC
LGCC:最初一次 GC 起因
GCC:以后 GC 起因(No GC 为以后没有执行 GC)
12.-printcompilation JVM 编译办法统计

[root@hadoop ~]# jstat -printcompilation 3346 #输入 JIT 编译的办法信息
Compiled Size Type Method
421 60 1 sun/nio/ch/Util$2 clear
Compiled:编译工作的数目
Size:办法生成的字节码的大小
Type:编译类型
Method:类名和办法名用来标识编译的办法。类名应用 / 做为一个命名空间分隔符。办法名是给定类中的办法。上述格局是由 -XX:+PrintComplation 选项进行设置的
近程监控

与 jps 一样,jstat 也反对近程监控,同样也须要开启平安受权,办法参照 jps。

C:\Users\Administrator>jps 192.168.146.128
3346 QuorumPeerMain
3475 Jstatd
C:\Users\Administrator>jstat -gcutil 3346@192.168.146.128
S0 S1 E O M CCS YGC YGCT FGC FGCT GCT
52.97 0.00 65.15 13.92 97.39 98.02 8 0.020 0 0.000 0.020

如果本文对你有帮忙,别忘记给我个 3 连,点赞,转发,评论,

咱们下期见!答案获取形式:已赞 已评 已关~

学习更多 JAVA 常识与技巧,关注与私信博主(666)

正文完
 0