jps - 虚拟机进程状况工具

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虚拟机》第二版 周志明著,仅作为学习记录,书籍中用到的案例代码及描述有部分修改,但未改变原意。