基本情况
jstat(JVM Statistics Monitoring Tool):用于监视虚拟机各种运行状态信息的命令行工具。它可以显示本地或者远程虚拟机进程中的类装载、内存、垃圾收集、JIT编译等运行数据。
在没有GUI图形界面,只提供了纯文本控制台环境的服务器上,它将是运行期定位虚拟机性能问题的首选工具。常用于检测垃圾回收问题以及内存泄漏问题。
基本语法
它的基本使用语法为:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
查看命令相关参数:
jstat -h 或 jstat -help
option参数
选项option可以由以下值构成。
-
类装载相关的:
- -class:显示ClassLoader的相关信息:类的装载、卸载数量、总空间、类装载所消耗的时间等。
-
垃圾回收相关的:
- -gc:显示与GC相关的堆信息。包括Eden区、两个Survivor区、老年代、永久代等的容量、已用空间、GC时间合计等信息。
- -gccapacity:显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
- -gcutil:显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比
- -gccause:与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。
- -gcnew:显示新生代GC状况
- -gcnewcapacity:显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
- -geold:显示老年代GC状况
-
JIT相关的:
- -compiler:显示JIT编译器编译过的方法、耗时等信息
- -printcomplication:输出已经被JIT编译的方法
interval
用于指定输出统计数据的周期,单位为毫秒。即:查询间隔
jstat -class 14064 1000
count
用于指定查询的总次数
jstat -class 14064 1000 10
-t参数
可以在输出信息前加上一个Timestap列,显示程序的运行时间。单位:秒
经验:
我们可以比较Java进程之间的启动时间以及总GC时间(GCT列),或者两次测量的间隔时间以及总GC时间的增量,来得出GC时间占运行时间的比例。
如果该比例超过20%,则说明目前堆的压力较大;如果该比例超过90%,则说明堆里几乎没有可用空间,随时都可能抛出OOM异常。
-h参数
可以在周期性数据输出时,输出多少行数据后输出一个表头信息
梦想很模糊,去追,它会渐变清晰。青春励志,奋斗下去别放弃。