其他
你了解 Java 的 jstat 命令吗?
点击上方蓝色“程序猿DD”,选择“设为星标”
回复“资源”获取独家整理的学习资料!
作用
jstat 工具用于检测到的 Java 虚拟机 (JVM) 的性能统计信息,比如GC、内存大小、编译时间等。
命令格式
jstat [ generalOption | outputOptions vmid [interval[s|ms] [count]] ]
generalOption:
jstat -help|-options
执行 jstat -options命令后各个选项,见下面
选项 | 描述 |
---|---|
-class | 类加载行为的统计信息 |
-compiler | 即时编译热点行为的统计 |
-gc | 堆行为的统计 |
-gcutil | 和GC一样,但输出主要关注已使用空间占总空间的百分比 |
-gccapacity | Java堆各个区域使用到的最大和最小空间 |
-gccause | 垃圾回收统计信息 (和 gcutil 相同) , 最后和当前 垃圾回收事件 |
-gcmetacapacity | 输出永久代使用到的最大和最小空间 |
-gcnew | 新生代的统计 |
-gcnewcapacity | 同上,顺带输出主要关注使用到的最大和最小空间 |
-gcold | 年老代和永生代行为统计 |
-gcoldcapacity | 年老代行为统计 |
-printcompilation | 输出已经被JIT编译的方法 |
outputOptions:
一个或多个输出选项, 包括单个 stat选项, 加上任何-t、h 和 J 选项
vmid:
虚拟机标识符 进程id
ps -ef | grep java
或者
jps -l
interval:
采样间隔在指定的单位,秒(s)或毫秒(ms)。默认单位是毫秒。必须是正整数。如果指定,JSTAT将在每个间隔产生其输出
count:
显示的次数。默认值是无穷大;也就是说,JSTAT显示统计数据,直到目标JVM终止或JSTAT命令终止。必须是正整数
例子
-class选项
输入
jstat -class 29271 1000 20
输出
Loaded Bytes Unloaded Bytes Time
22182 42401.0 638 847.4 39.52
22182 42401.0 638 847.4 39.52
列 | 描述 |
---|---|
loaded | 已经装载的数据量 |
bytes | 装载的字节数 |
unloaded | 卸载类的数量 |
bytes | 卸载类的字节数 |
time | 装载和卸载所花费的时间 |
-compiler选项
输入
jstat -compiler 29271 1000 20
输出
Compiled Failed Invalid Time FailedType FailedMethod
6663 3 0 108.64 1 org/apache/jasper/xmlparser/ParserUtils convert
6663 3 0 108.64 1 org/apache/jasper/xmlparser/ParserUtils convert
列 | 描述 |
---|---|
Compiled | 编译任务执行数量 |
Failed | 编译任务执行失败的数量 |
Invalid | 失效的数量 |
Time | 花费的时间 |
FailedType | 失败任务的类型 |
FailedMethod | 失败任务的方法 |
-gc选项
输入
jstat -gc 29271 1000 20
输出
S0C S1C S0U S1U EC EU OC OU PC PU YGC YGCT FGC FGCT GCT
4096.0 4096.0 0.0 3088.4 691200.0 85378.5 1398272.0 337712.4 262144.0 121554.1 25374 413.439 7 5.536 418.975
4096.0 4096.0 0.0 3088.4 691200.0 85727.0 1398272.0 337712.4 262144.0 121554.1 25374 413.439 7 5.536 418.975
列 | 描述 |
---|---|
S0C | 第一个survivor的容量 |
S1C | 第二个survivor的容量 |
S0U | 第一个survivor的使用情况 |
S1U | 第二个survivor的使用情况 |
EC | Eden区的总容量 |
EU | Eden区已使用的容量 |
OC | Old区的总容量 |
OU | Old区已使用的容量 |
PC | 当前perm的容量 (KB) |
PU | perm的使用 (KB) |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收时间 |
GCT | 垃圾回收总消耗时间 |
-gcutil选项
输入
jstat -gcutil 29271 1000 20
输出
S0 S1 E O P YGC YGCT FGC FGCT GCT
83.70 0.00 62.04 24.11 46.37 25373 413.423 7 5.536 418.958
83.70 0.00 62.06 24.11 46.37 25373 413.423 7 5.536 418.958
列 | 描述 |
---|---|
S0 | 第一个survivor的容量 |
S1 | 第二个survivor的容量 |
E | Eden区的总容量 |
O | Old区的总容量 |
P | 当前perm的容量 (KB) |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收时间 |
GCT | 垃圾回收总消耗时间 |
-gccapacity选项
输入
jstat -gccapacity 29271 1000 20
输出
NGCMN NGCMX NGC S0C S1C EC OGCMN OGCMX OGC OC PGCMN PGCMX PGC PC YGC FGC
699392.0 699392.0 699392.0 4096.0 4096.0 691200.0 1398272.0 1398272.0 1398272.0 1398272.0 262144.0 262144.0 262144.0 262144.0 25374 7
699392.0 699392.0 699392.0 4096.0 4096.0 691200.0 1398272.0 1398272.0 1398272.0 1398272.0 262144.0 262144.0 262144.0 262144.0 25374 7
列 | 描述 |
---|---|
NGCMN | 年轻代初始容量(kb) |
NGCMX | 年轻代最大容量(kb) |
NGC | 年轻代当前容量 |
S0C | 幸存区1当前容量 (KB) |
S1C | 幸存区2容量 (KB) |
EC | 伊甸区容量 |
OGCMN | 老年代初始容量(kb) |
OGCMX | 老年代最大容量(kb) |
OGC | 当前老年代容量 |
OC | Old代的容量 |
PGCMN | perm代中初始化(最小)的大小 |
PGCMX | perm代的最大容量 |
PGC | perm代的当前容量 |
PC | 持久代容量 |
YGC | yfc次数 |
FGC | fgc次数 |
-gccause选项
输入
jstat -gccause 29271 1000 20
输出
S0 S1 E O P YGC YGCT FGC FGCT GCT LGCC GCC
0.00 75.40 72.95 24.15 46.37 25374 413.439 7 5.536 418.975 Allocation Failure No GC
0.00 75.40 73.03 24.15 46.37 25374 413.439 7 5.536 418.975 Allocation Failure No GC
列 | 描述 |
---|---|
S0 | 第一个survivor的容量 |
S1 | 第二个survivor的容量 |
E | Eden区的总容量 |
O | Old区的总容量 |
P | 当前perm的容量 (KB) |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收时间 |
GCT | 垃圾回收总消耗时间 |
LGCC | 最近垃圾回收的原因 |
GCC | 当前垃圾回收的原因 |
-gcnew选项
输入
jstat -gcnew 29271 1000 20
输出
S0C S1C S0U S1U TT MTT DSS EC EU YGC YGCT
4096.0 4096.0 0.0 3088.4 1 15 4096.0 691200.0 588124.7 25374 413.439
4096.0 4096.0 0.0 3088.4 1 15 4096.0 691200.0 588759.6 25374 413.439
列 | 描述 |
---|---|
S0C | 第一个survivor的容量 |
S1C | 第二个survivor的容量 |
S0U | 第一个survivor的使用情况 |
S1U | 第二个survivor的使用情况 |
TT | 最大持有次数限制 |
MTT | 第二个survivor的使用情况 |
DSS | 期望的幸存者大小 |
EC | Eden区的总容量 |
EU | Eden区已使用的容量 |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
-gcnewcapacity选项
输入
jstat -gcnewcapacity 29271 1000 20
输出
NGCMN NGCMX NGC S0CMX S0C S1CMX S1C ECMX EC YGC FGC
699392.0 699392.0 699392.0 232960.0 4096.0 232960.0 4096.0 698368.0 691200.0 25374 7
699392.0 699392.0 699392.0 232960.0 4096.0 232960.0 4096.0 698368.0 691200.0 25374 7
列 | 描述 |
---|---|
NGCMN | 年轻代初始容量(kb) |
NGCMX | 年轻代最大容量(kb) |
NGC | 年轻代当前容量 |
S0CMX | 幸存区1最大容量 (KB) |
S0C | 幸存区1当前容量 (KB) |
S1CMX | 幸存区1最大容量 (KB) |
S1C | 幸存区2容量 (KB) |
ECMX | 伊甸区最大容量 |
EC | 伊甸区容量 |
YGC | yfc次数 |
FGC | fgc次数 |
-gcold选项
输入
jstat -gcold 29271 1000 20
输出
PC PU OC OU YGC FGC FGCT GCT
262144.0 121554.1 1398272.0 337896.5 25375 7 5.536 418.995
262144.0 121554.1 1398272.0 337896.5 25375 7 5.536 418.995
列 | 描述 |
---|---|
PC | 持久化容量 |
PU | 持久化使用容量 |
OC | 老年区容量 |
OU | 老年区使用容量 |
YGC | 新生代垃圾回收次数 |
YGCT | 新生代垃圾回收时间 |
FGC | 老年代垃圾回收次数 |
FGCT | 老年代垃圾回收时间 |
-gcoldcapacity选项
输入
jstat -gcoldcapacity 29271 1000 20
输出
OGCMN OGCMX OGC OC YGC FGC FGCT GCT
1398272.0 1398272.0 1398272.0 1398272.0 25373 7 5.536 418.958
1398272.0 1398272.0 1398272.0 1398272.0 25373 7 5.536 418.958
列 | 描述 |
---|---|
OGCMN | 老年代中初始化容量 |
OGCMX | 老年代中最大容量 |
OGC | 老年区当前容量 |
OC | Old代的容量 |
YGC | ygc次数 |
FGC | fgc次数 |
FGCT | fgc花费时间 |
GCT | gc的总时间 |
-printcompilation选项
输入
jstat -printcompilation 29271 1000 20
输出
Compiled Size Type Method
6663 3093 1 com/alibaba/dubbo/registry/support/FailbackRegistry retry
6663 3093 1 com/alibaba/dubbo/registry/support/FailbackRegistry retry
列 | 描述 |
---|---|
Compiled | 编译任务的数目 |
Size | 方法生成字节码大小 |
Type | 编译类型 |
Method | 编译方法 |
参考文档
https://docs.oracle.com/javase/7/docs/technotes/tools/share/jstat.html#general_options
往期推荐
Git 提交代码之后的几种后悔药
为什么大多数IOC容器使用ApplicationContext,而不用BeanFactory
JIRA、Confluence等产品明年2月停售本地化版本,将影响中国近90%的客户!
妙用 Intellij IDEA 创建临时文件,Git 跟踪不到的那种
国内首个比特币勒索病毒制作者落网,但过程有点好笑...
扫一扫,关注我
一起学习,一起进步
每周赠书,福利不断
﹀
﹀
﹀
深度内容
推荐加入