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]
表示可选参数,[<hostid>]
表示可选的主机标识符参数。这个参数用于指定要查询的远程主机的标识符或地址,其格式如 <hostname>[:<port>]
。
默认情况下,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 进程信息。
将 jps
支持的可选参数信息汇总如下:
参数 | 说明 |
---|---|
-V | 显示 jps 工具的版本信息 |
-l | 显示完整的类名而非缩写 |
-m | 显示传递给主类main()方法的参数 |
-v | 显示虚拟机的启动参数 |
-q | 仅显示进程ID,省略主类的全限定名 |
从上边信息可以看到, jps
命令对于查看Java进程的一些操作支持,大家可以根据自己的需求参照表格选择所需操作命令。
3.2 可选参数:-q
jps -q
是 jps
命令的一个选项,用于在列出 Java 进程时仅显示进程ID,而省略主类的全限定名。
在命令行中运行 jps -q
时,它将以静默模式输出正在运行的 Java 进程的进程ID,每个进程对应一行。这允许更方便地获取进程ID信息,而无需关注与进程相关联的主类名。
以下是一个使用 jps -q
的示例输出:
1234
5678
上述示例表示当前有两个正在运行的 Java 进程,其进程ID分别为 1234 和 5678。
使用 jps -q
可以帮助简化输出,特别是在需要处理或传递 Java 进程ID 的场景下,例如与其他命令或脚本进行集成、进行批处理操作等。它提供了一种更紧凑和简洁的方式来获取 Java 进程的标识符信息,而不包括多余的详细信息。
3.3 可选参数:-m
jps -m
是 jps
命令的一个选项,用于在列出 Java 进程时显示传递给主类 main()
方法的参数。
在命令行中运行 jps -m
时,它将列出正在运行的 Java 进程的详细信息,包括进程ID、主类名和传递给主类 main()
方法的参数。
以下是一个使用 jps -m
的示例输出:
1234 MainClass1 argument1 argument2
5678 MainClass2
上述示例表示当前有两个正在运行的 Java 进程,第一个进程的进程ID为 1234,它的主类名是 MainClass1
,并且传递了 argument1
和 argument2
作为 main()
方法的参数。第二个进程的进程ID为 5678,它的主类名是 MainClass2
。
使用 jps -m
可以获取更多关于运行中的 Java 进程的信息,包括传递给主类的参数。这对于调试和诊断操作非常有用,特别是当你需要确认 Java 进程启动时使用了哪些参数时。此选项提供了查看 Java 进程启动参数的简便方式,可以更好地理解 Java 应用程序的配置和执行情况。
3.4 可选参数:-l
jps -l
是 jps
命令的一个选项,用于在列出 Java 进程时显示完整的主类名,而不是缩写形式。
在命令行中运行 jps -l
时,它将列出正在运行的 Java 进程的详细信息,包括进程ID和完整的主类名。
以下是一个使用 jps -l
的示例输出:
1234 com.example.MainClass1
5678 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=value
5678 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命令结合使用,如
jstack
、jmap
等,以便对Java进程进行详细的线程分析和堆内存分析; - 调试与开发:用于开发人员识别和查找正在运行的Java进程,并在需要时附加各种调试器进行调试。
🌾 总结
JPS
是一个简单但功能强大的Java进程状态工具。它为开发人员提供了一种方便的方式来列出正在运行的Java进程,并显示与每个进程相关的信息。通过与其他Java命令结合使用,可以进行故障排除、性能调优和调试工作。尽管在某些情况下存在一些局限性,但对于监控和管理本地运行的Java进程来说,JPS
是一个非常有用的工具。