本文共 1359 字,大约阅读时间需要 4 分钟。
jps(Java Virtual Machine Process Status Tool)是JDK 1.5提供的一个显示当前所有java进程pid的命令,简单实用,非常适合在linux/unix平台上简单察看当前java进程的一些简单情况。
jdk中的jps命令可以显示当前运行的java进程以及相关参数,它的实现机制如下:
java程序在启动以后,会在java.io.tmpdir指定的目录下,就是临时文件夹里,生成一个类似于hsperfdata_User的文件夹,这个文件夹里(在Linux中为/tmp/hsperfdata_{userName}/),有几个文件,名字就是java进程的pid,因此列出当前运行的java进程,只是把这个目录里的文件名列一下而已。 至于系统的参数什么,就可以解析这几个文件获得。上面的内容就是我机器中/tmp/hsperfdata_hollis目录下的内容,其中2756, 2975就是我机器上当前运行中的java的进程的pid,我们执行jps验证一下:
先来看看帮助,使用jps -help查看帮助。
-q 只显示pid,不显示class名称,jar文件名和传递给main 方法的参数。
-m 输出传递给main 方法的参数,在嵌入式jvm上可能是null。
-l 输出应用程序main class的完整package名 或者 应用程序的jar文件完整路径名。
-v 输出传递给JVM的参数
现象: 用ps -ef|grep java能看到启动的java进程,但是用jps查看却不存在该进程的id。待会儿解释过之后就能知道在该情况下,jconsole、jvisualvm可能无法监控该进程,其他java自带工具也可能无法使用
分析: jps、jconsole、jvisualvm等工具的数据来源就是这个文件(/tmp/hsperfdata_userName/pid)。所以当该文件不存在或是无法读取时就会出现jps无法查看该进程号,jconsole无法监控等问题
原因: