jstat (JVM Statistics Monitoring Tool)
作用:
用于监控虚拟机各种运行状态信息的命令行工具。可以显示本地或者远程虚拟机进程中的类转载、内存、垃圾收集、JIT编译等运行数据。
用法:
jstat -<option> [-t] [-h<lines>] <vmid> [<interval> [<count>]]
1、option
类转载相关
-class: 显示ClassLoader相关信息
垃圾回收相关
-gc : 显示GC相关的堆信息。Eden、Survivor、Young、Old等的容量,GC时间合计等信息;
-gccapacity∶ 显示内容与-gc基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间。
-gcutil∶ 显示内容与-gc基本相同,但输出主要关注已使用空间占总空间的百分比。
-gccause∶ 与-gcutil功能一样,但是会额外输出导致最后一次或当前正在发生的GC产生的原因。
-gcnew∶ 显示新生代GC状况
-gcnewcapacity∶ 显示内容与-gcnew基本相同,输出主要关注使用到的最大、最小空间
-geold∶ 显示老年代GC状况
-gcoldcapacity∶ 显示内容与-gcold基本相同,输出主要关注使用到的最大、最小空间
-gcpermcapacity∶显示永久代使用到的最大、最小空间。
JIT相关
-compiler: JIT编译过的方法,耗时等信息;
-printcompilation: 输出已经被JIT编译的方法
-t : 程序开始执行到当前时间;
-h: 打印表头,n 每隔n行数据,打印表头
2、interval 用于指定输出统计数据的周期、单位毫秒(间隔);
3、 count 用于指定查询总次数;
jstat还可以用来判断是否出现内存泄漏。
第1步∶
在长时间运行的 Java 程序中,我们可以运行jstat命令连续获取多行性能数据,并取这几行数据中 OU 列(即已占用的老年代内存)的最小值。
第2步∶
然后,我们每隔一段较长的时间重复一次上述操作,来获得多组 OU 最小值。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏。