jps(JVM Process Status Tool)与 UNIX 的 ps 命令类似:可以列出正在运行的虚拟机进程,并显示虚拟机执行主类(Main Class,main()函数所在的类)名称以及这些进程的本地虚拟机唯一 ID(Local Virtual Machine Identifier,LVMID)。虽然功能比较单一,但它是使用频率最高的 JDK 命令行工具,因为其他的 JDK 工具大多需要输入它查询到的 LVMID 来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID 与操作系统的进程 ID(Process Identifier,PID)是一致的,使用 Windows 的任务管理器或者 UNIX 的 ps 命令也可以查询到虚拟机进程的 LVMID ,但如果同时启动了多个虚拟机进程,无法根据进程名称定位时,那就只能依赖 jps 命令显示主类的功能才能区分了。
jps 的命令格式如下:
[root@niuhp ~]# jps -help
usage: jps [-help]
jps [-q] [-mlvV] [<hostid>]
Definitions:
<hostid>: <hostname>[:<port>]
执行命令 jps -mlv
输出:
23744 test1.jar
19012 test2.jar -Xbootclasspath/a:conf
19845 test3.jar -Xbootclasspath/a:conf
9446 sun.tools.jps.Jps -mlv -Dapplication.home=/usr/java/jdk1.8.0_152 -Xms8m
18665 test4.jar -Xbootclasspath/a:conf
6044 test5.jar -Xms4g -Xmx4g -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:SurvivorRatio=3 -XX:MaxTenuringThreshold=10 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=tmp/dump.hprof -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -Xloggc:tmp/gc.log -Xbootclasspath/a:conf
26668 test6.jar -Xbootclasspath/a:conf
jps 可以通过 RMI 协议查询开启了 RMI 服务的远程虚拟机进程状态,hostid 为 RMI 注册表中注册的主机名。下表为 jps 的命令选项说明:
选项 | 说明 |
---|---|
-q | 只输出 LVMID ,省略主类名称 |
-l | 输出主类的全名,如果进程执行的是 jar 包,输出 jar 路径 |
-m | 输出虚拟机进程启动时传递给主类 main() 函数的参数 |
-v | 输出虚拟机进程启动时 JVM 参数 |
文章摘自《深入理解Java虚拟机》第二版 周志明著,仅作为学习记录,书籍中用到的案例代码及描述有部分修改,但未改变原意。