jstat是用于监视虚拟机各种运行状态信息的命令行工具。他可以显示本地或者远程虚拟机进程中的类加载,内存,垃圾收集,即时编译等运行时数据。
实例代码:
public class ScannerTest {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String info = scanner.next();
}
}
启动后,使用上篇等jps 命令查看当前进程,然后在使用jstat工具进行查看当前进程虚拟机统计的信息。
-class 监视类加载,卸载数量,总空间以及类装载所耗费的时间
jstat -class 737
-compiler 输出即时编译器编译过的方法,耗时等信息
jstat -compiler 737
-printcompilation 输出已经被即时编译的方法
jstat -printcompilation 737上面的指令与gc 无关,下面我们看看gc有关的,比如新生代,老年代,永久代等堆内存等消耗情况,实例代码:
* -Xms60m -Xmx60m -XX:SurvivorRatio=8
*/
public class GCTest {
public static void main(String[] args) {
ArrayList<byte[]> list = new ArrayList<>();
for (int i = 0; i < 1000; i++) {
byte[] arr = new byte[1024 * 100];//100KB
list.add(arr);
try {
Thread.sleep(120);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
设置一下jvm参数,堆等最小值,和最大值,运行代码,还是上面的使用jps命令查看进程id然后在使用 jstat进行监控信息
-gc 监视堆状况,包括 Eden区,2个Survivor区,老年代,永久代等容量,已用空间,垃圾收集时间合计等信息
jstat -gc 840jstat支持查询间隔,和次数我们来试试
jstat -gc 840 250 20
-gccapacity 监视内容和-gc一样,但主要输出主要关注堆各个区域使用到的最大,最小空间
jstat -gccapacity 863
jstat -gccapacity 863 250 10
-gcutil 与-gc基本相同,但关注与已使用空间占空间的百分比。
jstat -gcutil 880
-gccause 与-gcutil一样,但是会额外输出导致上一次垃圾收集产生的原因。
jstat -gccause 888
-gcnew 监视新生代垃圾收集状况
jstat -gcnew 888 250 10
-gcnewcapacity 与-gcnew基本相同,关注使用到到最大,最小空间
jstat -gcnewcapacity 888 250 20
-gcold 监视老年代垃圾收集状况
jstat -gcold 888
-gcoldcapacity 与-gcold基本相同,关注使用到到最大,最小空间
jstat -gcoldcapacity 888
-gcpermcapacity 输出永久代使用到到最大,最小空间。
jstat -gcpermcapacity 888
使用jstat工具在纯文本状态下监视虚拟机状态的变化,在用户体验下不如 JMC,VisualVM等可视化监控工具,但在生产情况下,不一定会使用到可视化工具,所以直接在控制台中使用jstat命令依然是一种常用到监控方式,好了jstat就聊到这里了,有问题下方讨论,一起学习。