《深入理解Java虚拟机》学习笔记。
在定位问题的时候,知识和经验是关键基础,数据是依据,而工具是运用知识处理数据的手段…
jstat
命令可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
https://docs.oracle.com/javase/8/docs/technotes/tools/unix/jstat.html
jstat: 虚拟机统计信息监视工具
1 简介
jstat(JVM Statistics Monitoring Tool)
是用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
2 原理
jstat
信息同样也是从PerfData
文件中获取信息的。
3 用法
jstat
命令格式:
1 | jstat [ option vmid [ interval [ s|ms ] [ count ] ] ] |
1 | jstat -help |
interval
:查询间隔
count
:查询次数
关于VMID
与LVMID
:
如果是本地虚拟机进程,
VMID
与LVMID
是相同的;如果是远程虚拟机进程,VMID
的格式为:
[protocol:][//]lvmid[@hostname[:port]/servername]
选项(options):(统计信息单位默认是kb)
选项 | 说明 |
---|---|
-class | 监视类装载、卸载数量、总空间以及类装载所耗费的时间 |
-compiler | 输出JIT编译器编译过的方法、耗时等信息 |
-gc | 监视Java堆状况,包括Eden区、两个survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息 |
-gccapacity | 监视内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间 |
-gccause | 与-gcutil功能一样,但是会额外输出导致上一次GC产生的原因 |
-gcmetacapacity | JDK8监控元空间信息,输出主要关注使用到的最大、最小空间 |
-gcnew | 监视新生代GC状况 |
-gcnewcapacity | 监视内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间 |
-gcold | 监视老年代GC状况 |
-gcoldcapacity | 监视内容与-gcold基本相同,输出主要关注使用到的最大、最小空间 |
-gcutil | 监视内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比 |
-printcompilation | 输出已经被JIT编译的方法 |
4 实战
4.1 类加载信息统计
1 | jstat -class <vmid> [interval ] [ count ] |
1 | jstat -class 27431 1000 1000 |
4.2 JIT 即时编译信息统计
1 | jstat -compile <vmid> [interval ] [ count ] |
1 | jstat -compiler 27431 1000 1000 |
4.3 GC 信息统计
1 | jstat -gc <vmid> [interval ] [ count ] |
1 | jstat -gc 27431 1000 1000 |
4.4 堆内存信息统计
1 | jstat -gccapacity <vmid> [interval ] [ count ] |
1 | jstat -gccapacity 27431 1000 1000 |
OGC
和 OC
有什么区别?
OGC是老年代
OC是包括老年代和元空间
4.5 垃圾收集原因
1 | jstat -gccause <vmid> [interval ] [ count ] |
1 | jstat -gccause 27431 1000 1000 |
4.6 元空间大小统计信息
1 | jstat -gcmetacapacity <vmid> [interval ] [ count ] |
1 | jstat -gcmetacapacity 27431 1000 1000 |
4.7 新生代内存信息统计
1 | jstat -gcnew <vmid> [interval ] [ count ] |
1 | jstat -gcnew 27431 1000 1000 |
4.8 新生代空间大小统计
1 | jstat -gcnewcapacity <vmid> [interval ] [ count ] |
1 | jstat -gcnewcapacity 27431 1000 1000 |
4.9 老年代内存信息统计
1 | jstat -gcold <vmid> [interval ] [ count ] |
1 | jstat -gcold 27431 1000 1000 |
4.10 老年代空间大小统计
1 | jstat -gcoldcapacity <vmid> [interval ] [ count ] |
1 | jstat -gcoldcapacity 27431 1000 1000 |
4.11 GC统计信息摘要(最常用)
1 | jstat -gcutil <vmid> [interval ] [ count ] |
1 | jstat -gcutil 27431 1000 1000 |
4.12 统计JIT已编译的方法信息
1 | jstat -printcompilation <vmid> [interval ] [ count ] |
1 | jstat -printcompilation 27431 1000 1000 |
5 总结
### 5.1 重复打印表头
在周期监控中,往往容易刷掉title,从而我们不确定数据对应的是哪列,这是可以使用-h
参数来定期打印表头:
1 | jstat -gcutil -h3 27431 1000 1000 |
-h3
是指每三行打印一次表头。
5.2 添加样本时间戳
还可以通过-t
参数在监控样本的第一列打印JVM启动以来经过的时间戳:
1 | jstat -gcutil -t -h3 27431 1000 1000 |
在实际问题排查时,我们最常用jstat -gcutil <vmid> <interval> <count>
来查看当前服务的GC情况。
6 Ths
54686973 20617274 69636C65 20697320 64656469 63617465 6420746F 20526F6E 67657220 77686F20 49206465 65706C79 206C6F76 65642E
本文链接: https://stefanxiepj.github.io/archives/aae4f7c2.html
版权声明: 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。转载请注明出处!
![知识共享许可协议](https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png)