jstat的用处
jstat(Java Statistics Monitoring Tool) 是用于监视虚拟机各种运行状态信息的命令行工具,
它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据,在没有GUI图形界面,
只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选。
jstat 命令格式
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
参数简介:
- option:选项,一般使用 -gcutil 查看gc情况。
- vmid: VM的进程号.虚拟机进程号。
- interval:间隔时间,单位为秒或者毫秒
- count: 打印次数,如果缺省会一直打印下去
注意事项:
1.参数interval和count代表查询间隔时间与次数,如果省略这两个参数,说明只查询一次。
2.命令格式中的vmid是虚拟机进程号,lvmid是本地虚拟机进程号,如果是本地虚拟机进程,
vmid==lvmid,如果是远程虚拟机进程,那么vmid的格式为:
[protocol:][//] lvmid [@hostname[:port]/servername]
jstat -option vmid interval count
假设需要每隔1秒,查询一次进程23960的垃圾收集情况,一共查询5次,那么命令如下:
jstat -gc 23960 1s 5 //interval 后缀时间单位缺省时默认为ms 只能设置为 ms 或者 s
执行结果如下:
jstat 主要选项如下:
选项 | 作用 |
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-gc | 监视Java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容基本与-gc相同,但输出主要关注java堆各个区域使用到的最大最小空间 |
-gcutil | 监视内容基本与-gc相同,但输出主要关注已使用空间占总空间的百分比 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代GC状况 |
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间 |
-gcpermcapacity | 输出永久代使用到的最大、最小空间(jdk1.8 以后无法使用) |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-printcompilation | 输出已经被JIT编译的方法 |
jstat 返回信息各列的含义:
列名 | 描述 |
S0C | Survivor0的当前容量 |
S1C | Survivor1的当前容量 |
S0U | Survivor0的使用量 |
S1U | Survivor1的使用量 |
EC | Eden区的当前容量 |
EU | Eden区的使用量 |
OC | old区的当前容量 |
OU | old区的使用量 |
PC | 方法区的当前容量 |
PU | 方法区的使用量 |
YGC | Young GC次数 |
YGCT | Young GC累积耗时 |
FGC | Full GC次数 |
FGCT | Full GC累积耗时 |
GCT | GC总的累积耗时 |
NGCMN | 新生代最小容量 |
NGCMX | 新生代最大容量 |
NGC | 新生代当前容量 |
OGCMN | 老年代最小容量 |
OGCMX | 老年代最大容量 |
OGC | 老年代当前容量 |
PGCMN | 方法区最小容量 |
PGCMX | 方法区最大容量 |
PGC | 方法区当前容量 |
PC | 方法区的当前容量 |
PU | 方法区使用量 |
LGCC | 上一次GC发生的原因 |
GCC | 当前GC发生的原因 |
TT | 存活阀值,如果对象在新生代移动次数超过此阀值,则会被移到老年代 |
MTT | 最大存活阀值,如果对象在新生代移动次数超过此阀值,则会被移到老年代 |
DSS | survivor区的理想容量 |
jstat 各选项执行效果
jstat -class 23960 100 5
jstat -gc 23960 100 5
jstat -gccapacity 23960 100 5
jstat -gcutil 23960 100 5
jstat -gccause 23960 100 5
jstat -gcnew 23960 100 5
jstat -gcnewcapacity 23960 100 5
jstat -gcold 23960 100 5
jstat -gcoldcapacity 23960 100 5
jstat -gcpermcapacity 23960 100 5
这个选项是输出永久代使用到的最大、最小空间,我用的是JDK1.8,1.8已经移除了永久代,所以报错了。
jstat -compiler 23960 100 5
jstat -printcompilation 23960 100 5
参考资料
- 深入理解Java虚拟机
- Java命令学习系列(四)——jstat
- [译]GC专家系列2:Java 垃圾回收的监控
- JDK8-废弃永久代(PermGen)迎来元空间(Metaspace)