JPS使用

 

 

熟悉Linux的朋友们都知道,Linux下有一个常用的命令叫做ps(Process Status),是用来查看Linux环境下进程信息的。同样的,在Java Virtual Machine里面也提供了类似的工具供广大Java开发人员使用,它就是jps(Java Process Status),它可以用来显示正在运行的虚拟机进程。

 

显示的信息主要包括两项,一个是虚拟机的执行子类,另一个是这些进程的本地虚拟机唯一ID(Local Virtual Machine Identifier, LVMID)。Jps的功能可以说是十分单一,但是它可以说是最常用的工具之一了,因为其它都需要用到它查询出来的LVMID来确定监控的是哪一个虚拟机进程。

 

有些人可能会问既然Linux下面的ls可以查询到进程了,为什么还要这个jps工具呢?如果只运行一个虚拟机进程的时候,ls当然是十分有效的。但是运行多个虚拟机进程,且这些进程不可以通过名称来分别的时候,就需要使用虚拟机的执行主类名来进行区分了,所以jps还是很有必要的。

Jps命令的格式:
Jps [ options ] [ hostid ]
 
Jps执行样例:
F:\ProgromFiles\Java\JDK\bin>jps -l
5008 sun.tools.jps.Jps

Jps可以通过RMI协议来查询开启了RMI服务的远程虚拟机进程状态,hostid就是RMI注册表中注册的主机名。

Jps命令的常用选项表如下:

-q    只输出LVMID,省略执行主类名

-m   输出进程启动时,传给执行主类main()函数的参数

-l    输出主类的全名,如果进行执行的是jar,输出jar路径

-v    输出虚拟机进行启动时的JVM参数

 

使用命令的时的常见问题:

<!--[if !supportLists]-->1.执行jps命令后没有任何输出?

分析:java程序启动后,默认(请注意是默认)会在/tmp/hsperfdata_userName目录下以该进程的id为文件名新建文件,并在该文件中存储jvm运行的相关信息,其中的userName为当前的用户名,/tmp/hsperfdata_userName目录会存放该用户所有已经启动的java进程信息。对于windows机器/tmp用Windows存放临时文件目录代替。

原因:(1)无文件读写权限,请确认运行该命令用户的权限。(2)检查相应目录下文件是否存在。