JDK 的很多小工具名字都参考了 Unix 命令的命名方式,jps(JVM Process Status Tool)是其中的典型。除了名字像 Unix 的 ps 命令外,它的功能也和 ps 命令类似。
jps 用来列出正在运行虚拟机进程,并显示虚拟机执行主类(Main Class,main() 函数所在的类)的名称,以及这些进程的本地虚拟机的唯一 ID(LVMID,Local Virtual Machine Identifier)。
虽然 jps 功能比较单一,但它是使用频率最高的 JDK 命令行工具,因为其他的 JDK 工具大多需要输入它查询到的 LVMID 来确定要监控的是哪一个虚拟机进程。对于本地虚拟机进程来说,LVMID 与操作系统的进程 ID(PID,Process Identifier)是一致的,使用 Windows 的任务管理器或 Unix 的 ps 命令也可以查询到虚拟机进程的 LVMID。但是,如果本地启动了多个虚拟机进程,此时无法根据进程名称区分虚拟机进程时,那就只能依赖 jps 命令显示主类的功能才能区分了。
jps [-help] jps [-q] [-mlvV] [<hostid>]
-q 只输出 LVMID,省略主类的名称
-m 输出虚拟机进程启动时传递给主类 main() 函数的参数
-l 输出主类的全名,如果进程执行的是 Jar 包,输出 Jar 路径
-v 输出虚拟机进程启动时 JVM 参数
(1)使用 -l 选项输出所有正在运行虚拟机主类的完全限定名,如下:
C:\Users\Administrator> jps -l 6276 org.jetbrains.idea.maven.server.RemoteMavenServer 8388 org/netbeans/Main 11976 6024 sun.tools.jps.Jps 11980 org.jetbrains.jps.cmdline.Launcher
(2)使用 -m 选项输出虚拟机进程启动时传递给主类 main() 函数的参数,如下:
C:\Users\Administrator> jps -m 6276 RemoteMavenServer 8388 Main --branding visualvm --cachedir C:\Users\Administrator\AppData\Local\VisualVM\Cache/8u40 11976 9304 Jps -m 11980 Launcher D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/aether-impl-1.1.0.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/log4j.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/commons-codec-1.10.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/lz4-1.3.0.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/plexus-interpolation-1.21.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/netty-common-4.1.30.Final.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/maven-builder-support-3.3.9.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/javac2.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/jdom.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/netty-transport-4.1.30.Final.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/platform-api.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/maven-model-3.3.9.jar;D:/ProgramFilesFree/jetbrains.ideaIU-2018.3.1.win/lib/annotations.jar;D:/ProgramFilesFre
(3)使用 -q 选项仅仅列出虚拟机的进程 LVMID,如下:
C:\Users\Administrator> jps -q 11460 6276 8388 11976 11980
(4)使用 -v 选项输出虚拟机进程启动时 JVM 参数,如下:
C:\Users\Administrator> jps -v 6276 RemoteMavenServer -Djava.awt.headless=true -Didea.version==2018.3.1 -Xmx768m -Didea.maven.embedder.version=3.3.9 -Dfile.encoding=GBK 8388 Main -Xms24m -Xmx256m -Dsun.jvmstat.perdata.syncWaitMs=10000 -Dsun.java2d.noddraw=true -Dsun.java2d.d3d=false -Dnetbeans.keyring.no.master=true -Dplugin.manager.install.global=false -Djdk.home=D:\ProgramFilesFree\Java\jdk1.8.0_45 -Dnetbeans.home=D:\ProgramFilesFree\Java\jdk1.8.0_45\lib\visualvm\platform -Dnetbeans.user=C:\Users\Administrator\AppData\Roaming\VisualVM\8u40 -Dnetbeans.default_userdir_root=C:\Users\Administrator\AppData\Roaming\VisualVM -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=C:\Users\Administrator\AppData\Roaming\VisualVM\8u40\var\log\heapdump.hprof -Dsun.awt.keepWorkingSetOnMinimize=true -Dnetbeans.dirs=D:\ProgramFilesFree\Java\jdk1.8.0_45\lib\visualvm\visualvm;D:\ProgramFilesFree\Java\jdk1.8.0_45\lib\visualvm\profiler 11976 -Xms128m -Xmx750m -XX:ReservedCodeCacheSize=240m -XX:+UseConcMarkSweepGC -XX:SoftRefLRUPolicyMSPerMB=50 -ea -Dsun.io.useCanonCaches=false -Djava.net.preferIPv4Stack=true -Djdk.http.auth.tunneling.disabledSchemes="" -XX:+HeapDumpOnOutOfMemoryError -XX:-OmitStackTraceInFastThrow -javaagent:JetbrainsIdesCrack-3.4-release-enc.jar -Djb.vmOptionsFile=D:\ProgramFilesFree\jetbrains.ideaIU-2018.3.1.win\bin\idea64.exe.vmoptions -Didea.jre.check=true -Dide.native.launcher=true -Didea.paths.selector=IntelliJIdea2018.3 -XX:ErrorFile=C:\Users\Administrator\java_error_in_idea_%p.log -XX:HeapDumpPath=C:\Users\Administrator\java_error_in_idea.hprof ...