Java进程状况之 jps 命令

 JDK 中的 jps 命令 沿用了同样的概念:它将打印所有正在运行的 Java 进程的相关信息。

一、概要

jps [-q] [-mlvV] [<hostid>]
jps [-help]
  • -q
     仅输出进程号。
  • -mlvV
    • -m 输出启动进程时传递给主类 main() 函数的参数。
    • -l 输出应用程序主类的完整包名或应用程序 jar 文件的完整路径名。
    • -v 输出传递给 JVM 的参数。
    • -V (默认)输出进程标识号、主类名。
  • hostid
     应为其生成流程报告的主机的标识符。hostid 可以包括可选组件,这些组件指示通信协议、端口号和其他特定于实现的数据。请参见主机标识符。
  • -help
     显示 jps 命令的帮助信息。

二、说明

jps命令列出了目标系统上已检测的 Java HotSpot 虚拟机。该命令仅限于报告它拥有访问权限的虚拟机的信息。

注意:JDK 10 增加了在附加到运行在独立备审进程中的 Java 进程时使用附加应用编程接口的支持。然而,jps 工具看不到 JVM 进程在单独的 docker 实例中运行。如果您试图将一个 Linux 主机与一个 docker 容器中的虚拟机连接起来,您必须使用诸如 ps 之类的工具来查找 JVM 的 PID,然后在接受该 PID 的工具的命令行上指定该 PID。

 如果 jps 命令在没有指定 hostid 的情况下运行,那么它会在本地主机上搜索已检测的 JVM。如果从主机 id 开始,它将使用指定的协议和端口在指定的主机上搜索 JVM。假设 jstatd 进程正在目标主机上运行。
jps命令为在目标系统上找到的每个已检测的 JVM 报告本地 JVM 标识符或 lvmid。lvmid 通常是但不一定是操作系统的 JVM 进程标识符。在没有选项的情况下,jps命令列出了每个 Java 应用程序的 lvmid,后跟应用程序类名或 JAR 文件名的缩写。类名或 JAR 文件名的缩写省略了类的包信息或 JAR 文件路径信息。
jps命令使用 Java 启动器查找传递给主方法的类名和参数。如果目标 JVM 是用自定义启动器启动的,那么类或 JAR 文件名以及主方法的参数都不可用。在这种情况下,jps命令输出类名或 jar 文件名以及主方法参数的未知字符串。
jps命令生成的 JVM 列表可能会受到授予运行该命令的主体的权限的限制。该命令仅列出主体拥有由操作系统特定访问控制机制确定的访问权限的 JVM。

三、节点标识

 节点标识或 hostid 是指示目标系统的字符串。hostid 字符串的语法对应于 URI 的语法:

[protocol:][[//]hostname][:port][/servername]
  • protocol
     通信协议。如果省略了该协议并且没有指定主机名,则默认协议是特定于平台的优化本地协议。如果省略协议并指定主机名,则默认协议是 rmi。
  • hostname
     指示目标主机的主机名或IP地址。如果省略主机名参数,则目标主机是本地主机。
  • port
     与远程服务器通信的默认端口。如果省略主机名参数或协议参数指定了优化的本地协议,则端口参数将被忽略。否则,端口参数的处理是特定于实现的。对于默认 rmi 协议,端口参数指示远程主机上 RMI 注册表的端口号。如果端口参数被省略,并且协议参数指示 rmi,则使用默认 rmiregistry 端口(1099)。
  • servername
     该参数的处理取决于实现。对于优化的本地协议,此字段被忽略。对于 rmi 协议,该参数是一个字符串,表示远程主机上 RMI 远程对象的名称。请参见 jstatd 命令 -n 选项。

四、输出格式

jps命令的输出具有以下模式:

lvmid [ [ classname | JARfilename | "Unknown"] [ arg* ] [ jvmarg* ] ]

 所有输出标记都用空格隔开。当试图将参数映射到它们的实际位置参数时,包含嵌入空格的 arg 值会引入歧义。

注意:建议您不要编写脚本来解析 jps 的输出,因为格式在将来的版本中可能会改变。如果您编写了解析 jps 输出的脚本,那么应该为该工具的未来版本修改它们。

五、示例

 列出本地主机上已检测的虚拟机:

jps
18027 Java2Demo.JAR
18032 jps
18005 jstat

 以下示例列出了远程主机上已检测的 JVM。本示例假设 jstat 服务器及其内部RMI注册表或单独的外部 rmiregistry 进程正在默认端口(端口1099)上的远程主机上运行。它还假设本地主机具有访问远程主机的适当权限。这个例子包括 -l 选项来输出长形式的类名或 jar 文件名。

jps -l remote.domain
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
2857 sun.tools.jstatd.jstatd

 下面的示例列出了远程主机上的仪表化 JVM,远程主机具有 RMI 注册表的非默认端口。本示例假设 jstatd 服务器正在远程主机上运行,内部 RMI 注册表绑定到端口 2002。此示例还使用 -m 选项来包含传递给每个列出的 Java 应用程序的 main 方法的参数。

jps -m remote.domain:2002
3002 /opt/jdk1.7.0/demo/jfc/Java2D/Java2Demo.JAR
3102 sun.tools.jstatd.jstatd -p 2002
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值