JDK很多小工具名字和Linux的命令比较像,jps就是其中的典型,和Linux的ps很像,功能也像。
功能介绍:列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()方法所在的类)名称以及这些进程的本地虚拟机唯一ID(LVMID,Local Virtual Machine Idertifier)。
命令格式:jps [options] [hostid]
命令详解:jps还可以通过RMI协议查询开启了RMI服务的运行虚拟机进程状态,参数hostid为RMI注册表中注册的主机名。
options常见参数:
-q:只输出LVMID,省略主类的名称;
-m:输出虚拟机进程启动传递给主类main()方法的参数;
-l:输出主类全名,如果进程执行的是jar包,输出jar路径;
-v:输出虚拟机启动时的JVM参数;
参数运行示例如下图:
监视虚拟机各种运行状态信息,可以显示本地或者远程虚拟机进程中的欸类加载、内存、垃圾收集、即时编译等运行数据.
命令格式:jstat [option vmid [interval[s|ms] [count]]];
命令解释:其中如果是本地虚拟机则vmid和上一个命令的LVMID是同一个,如果是远程,那么vimd是:[protocol:][//]lvmid[@hostname[:port]/servername]。
其中interval和count表示间隔时间和间隔次数,省略表示查询一次。
常见参数:
-class:监视类加载、卸载数量、总空间以及类转正所耗费的时间;
-gc:监视Java堆状况,包括Eden区、2个Survivor区、老年代、等容量,已用空间,垃圾收集时间;
-gccapacity:与-gc参数基本相同,但输出主要关注Java堆各个区域使用到的最大、最小空间;
-gcutil:与-gc基本相同,输出的是Java堆已使用空间占总空间百分比;
运行示例如下图:
S0、S1、E表示的是2个survivor和Eden使用比例,O、M表示老年代和元空间使用比例,CCS压缩使用比例,YGC、YGCT分别表示Young GC的次数和时间,FGC、FGCT同理,GCT则表示总时间。这些参数如果知道英语名字就能很好的记住。
用于生成虚拟机当前时刻的线程快照,线程快照就是当前虚拟机内每条线程正在执行的方法堆栈集合。可以用来定位线程长时间停顿的原因。
命令格式:jstack [option] vmid;
option参数:
-F:当正常输出的请求不被响应时,强制输出线程堆栈;
-l:除堆栈外,显示关于锁的附加线程;
-m:如果调用到本地方法栈的话,可以显示C/C++的堆栈;
运行示例如下图:
jconsole
虚拟机监控工具,可以选择指定的进程进行观察,运行如下图:
选择进去过后就可以看到监控结果了,如下图:
jvisualvm
是jdk自带的可视化监控工具,功能很强大,同时还可以安装各种扩展插件,运行如下图: