Java可执行命令之jps

  • 1️⃣ 概念
  • 2️⃣ 优势和缺点
  • 3️⃣ 使用
      • 3.1 语法格式
      • 3.2 可选参数:-q
      • 3.3 可选参数:-m
      • 3.4 可选参数:-l
      • 3.5 可选参数:-v
      • 3.6 可选参数:-V
  • 4️⃣ 应用场景
  • 总结

1️⃣ 概念

JPS(Java Virtual Machine Process Status Tool)Java Development Kit(JDK)提供的一个命令行工具,它用于查看运行在Java虚拟机(JVM)中的所有Java进程。该工具旨在提供一种方便的方式来获取和监控Java进程的状态信息,以帮助开发人员进行调试、性能分析或诊断。

JPS 是一个Java虚拟机进程状态工具,用于列出当前系统中正在运行的Java进程,并显示与每个进程相关的信息,如进程ID、主类名等。Java进程是指在Java虚拟机上运行的一个独立Java应用程序或服务的实例。

JPS使用 Java Attach API 来检索Java进程信息。它通过本地系统工具(例如ps)或平台特定的API(如JNI)获取正在运行的Java进程列表,并提取进程ID和主类名等相关信息。

2️⃣ 优势和缺点

优点:

  • 方便:提供了一种简单的方法来查看Java进程的状态信息;
  • 快速:快速列出当前运行的Java进程,包括进程ID和主类名称,不会对目标进程产生影响;
  • 实时:可以在动态的运行过程中通过不断查询进程状态来监控Java进程。

缺点:

  • 不支持远程机器:只能查看本地运行的Java进程,无法直接检测远程服务器上的进程;
  • 局限性:仅提供了有限的进程信息,不能提供详细的线程级别或资源使用情况。

3️⃣ 使用

3.1 语法格式

jps 命令的使用语法如下:

jps [-q] [-mlvV] [<hostid>]

其中,[-q] [-mlvV] 表示可选参数,[]表示可选的主机标识符参数。这个参数用于指定要查询的远程主机的标识符或地址,其格式如 [:]

默认情况下,jps 命令将列出运行在本地主机上的Java进程。然而,通过提供 [ hostid ] 参数,你可以指定某个远程主机来查询该主机上运行的Java进程。

[ hostid ] 可以是远程主机的计算机名称、IP地址或其它特定主机标识符。根据网络环境和配置,需要确保具有连接到远程主机的权限,并且目标主机上已启用 Java 进程管理功能。

以下是一些示例使用 [ hostid ]jps 命令:

  • jps -l myRemoteHost: 列出名为 “myRemoteHost” 的远程主机上的 Java 进程。
  • jps -v 192.168.1.100: 列出 IP 地址为 “192.168.1.100” 的远程主机上的 Java 进程。

注意,远程主机的访问权限、网络连接和远程 Java 管理配置方面的设置都会影响是否能够成功连接并获取远程主机的 Java 进程信息。

图1 jps连接失败时的情况

jps 支持的可选参数信息汇总如下:

参数说明
-V显示 jps 工具的版本信息
-l显示完整的类名而非缩写
-m显示传递给主类main()方法的参数
-v显示虚拟机的启动参数
-q仅显示进程ID,省略主类的全限定名

从上边信息可以看到, jps 命令对于查看Java进程的一些操作支持,大家可以根据自己的需求参照表格选择所需操作命令。

3.2 可选参数:-q

jps -qjps 命令的一个选项,用于在列出 Java 进程时仅显示进程ID,而省略主类的全限定名。

在命令行中运行 jps -q 时,它将以静默模式输出正在运行的 Java 进程的进程ID,每个进程对应一行。这允许更方便地获取进程ID信息,而无需关注与进程相关联的主类名。

以下是一个使用 jps -q 的示例输出:

12345678

上述示例表示当前有两个正在运行的 Java 进程,其进程ID分别为 1234 和 5678。

使用 jps -q 可以帮助简化输出,特别是在需要处理或传递 Java 进程ID 的场景下,例如与其他命令或脚本进行集成、进行批处理操作等。它提供了一种更紧凑和简洁的方式来获取 Java 进程的标识符信息,而不包括多余的详细信息。

3.3 可选参数:-m

jps -mjps 命令的一个选项,用于在列出 Java 进程时显示传递给主类 main() 方法的参数。

在命令行中运行 jps -m 时,它将列出正在运行的 Java 进程的详细信息,包括进程ID、主类名和传递给主类 main() 方法的参数。

以下是一个使用 jps -m 的示例输出:

1234 MainClass1 argument1 argument25678 MainClass2

上述示例表示当前有两个正在运行的 Java 进程,第一个进程的进程ID为 1234,它的主类名是 MainClass1,并且传递了 argument1argument2 作为 main() 方法的参数。第二个进程的进程ID为 5678,它的主类名是 MainClass2

使用 jps -m 可以获取更多关于运行中的 Java 进程的信息,包括传递给主类的参数。这对于调试和诊断操作非常有用,特别是当你需要确认 Java 进程启动时使用了哪些参数时。此选项提供了查看 Java 进程启动参数的简便方式,可以更好地理解 Java 应用程序的配置和执行情况。

3.4 可选参数:-l

jps -ljps 命令的一个选项,用于在列出 Java 进程时显示完整的主类名,而不是缩写形式。

在命令行中运行 jps -l 时,它将列出正在运行的 Java 进程的详细信息,包括进程ID和完整的主类名。

以下是一个使用 jps -l 的示例输出:

1234 com.example.MainClass15678 com.example.subpackage.MainClass2

上述示例表示当前有两个正在运行的 Java 进程。第一个进程的进程ID为 1234,其主类名为 com.example.MainClass1。第二个进程的进程ID为 5678,则对应的主类名为 com.example.subpackage.MainClass2

通过使用 jps -l,可以显示Java进程的完整主类名,而不仅仅是默认的缩写形式。这对于识别和区分具有相似主类名但不同应用程序的进程非常有用,并提供了更准确的标识和查看 Java 进程的方式。

3.5 可选参数:-v

jps -v 是 jps 的一个可选参数之一,在命令行中运行 jps -v 时,它将列出正在运行的Java进程的详细信息,包括每个进程的启动参数。

举例来说,如果你运行 jps -v 命令,会看到以下类似的输出:

1234 MainClass1 -Xmx512m -Dproperty=value5678 MainClass2 -Xms256m

上述例子表示正在运行两个Java进程,分别为ID为1234的 MainClass1 和 ID为5678的 MainClass2。同时,-Xmx512m 表示其中一个进程设置了最大堆内存大小为 512MB,而 -Dproperty=value 表示该进程还指定了一个系统属性。

3.6 可选参数:-V

jps -V 是 jps 的另一个可选参数。当在命令行中执行 jps -V 时,它将输出 jps 工具的版本信息。

例如,运行 jps -V 命令可能会返回:

JPS (Java Process Status Tool) version 11.0.7

上述输出表示使用的 jps 版本为 11.0.7。

注意两个参数-v-V的区别,jps -v 用于列出Java进程的详细信息和启动参数,而 jps -V 用于显示 jps 工具的版本信息。

4️⃣ 应用场景

  • 进程监控和管理:可用于定期检查Java进程是否在运行,以及获取进程ID和主类名称等信息;
  • 故障排除和性能调优:与其他Java命令结合使用,如 jstackjmap等,以便对Java进程进行详细的线程分析和堆内存分析;
  • 调试与开发:用于开发人员识别和查找正在运行的Java进程,并在需要时附加各种调试器进行调试。

总结

JPS是一个简单但功能强大的Java进程状态工具。它为开发人员提供了一种方便的方式来列出正在运行的Java进程,并显示与每个进程相关的信息。通过与其他Java命令结合使用,可以进行故障排除、性能调优和调试工作。尽管在某些情况下存在一些局限性,但对于监控和管理本地运行的Java进程来说,JPS是一个非常有用的工具。