概述
jps 命令类似与 linux 的 ps 命令,但是它只列出系统中所有的 Java 应用程序. 通过 jps 命令可以方便地查看 Java 进程的启动类,传入参数和 Java 虚拟机参数等信息.
如果在 linux 中想查看 java 的进程,一般我们都需要 ps -ef | grep java 来获取进程 ID.
如果只想获取 Java 程序的进程,可以直接使用 jps 命令来直接查看.
ps 用法
参数说明
-q:只输出进程 ID
-m:输出传入 main 方法的参数
-l:输出完全的包名,应用主类名,jar 的完全路径名
-v:输出 jvm 参数
-V:输出通过 flag 文件传递到 JVM 中的参数
[hostid]:远程服务器地址,jps 支持远程调用
[protocol:][[//]hostname][:port][/servername]
示例一:jps
无参数:显示进程的ID 和 类的名称
jps 不带参数,默认显示 进程 ID 和 启动类的名称.
示例二:jps -q
参数 -q 只输出进程 ID,而不显示出类的名称
示例三:jps -m
参数 -m 可以输出传递给 Java 进程(main 方法)的参数.
示例四:jps -l
参数 -l 可以输出主函数的完整路径(类的全路径).
示例五:jps -v
参数 -v 可以显示传递给 Java 虚拟机的参数.
获取远程服务器 jps 信息
jps 支持查看远程服务上的 jvm 进程信息.如果需要查看其他机器上的 jvm 进程,需要在待查看机器上启动 jstatd 服务.
开启 jstatd 服务
启动 jstatd 服务,需要有足够的权限. 需要使用 Java 的安全策略分配相应的权限.
创建 jstatd.all.policy 策略文件.
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
启动 jstatd 服务器
jstatd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=192.168.31.241
-J 参数是一个公共的参数,如 jps, jstat 等命令都可以接收这个参数. 由于 jps, jstat 命令本身也是 Java 应用程序, -J 参数可以为 jps 等命令本身设置 Java 虚拟机参数.
-Djava.security.policy:指定策略文件
-Djava.rmi.server.hostname:指定服务器的 ip 地址(可忽略)
默认情况下, jstatd 开启在 1099 端口上开启 RMI 服务器.
jps 原理
java 程序在启动以后,会在 java.io.tmpdir 指定的目录下,就是临时文件夹里,生成一个类似于 hsperfdata_User 的文件夹,这个文件夹里(在 Linux 中为 / tmp/hsperfdata_{userName}/),有几个文件,名字就是 java 进程的 pid,因此列出当前运行的 java 进程,只是把这个目录里的文件名列一下而已. 至于系统的参数什么,就可以解析这几个文件获得.
window 系统显示如下:
从文件中可以看出 1864,4296,12600 跟上面的 jps 命令输出的进程 ID 一致.
来源: http://www.jianshu.com/p/d39b2e208e72