jps,jinfo,jstat,jmap和jstack如何获取有关本地Java进程的信息?

时间:2019-04-13 21:46:07

标签: java linux process jvm

jps如何获取有关所有本地java进程的信息? 它是否连接到某些本地服务器进程以获取信息?

jinfo, jstat, jmapjstack如何获取有关本地java进程的信息? 他们是否连接到某些本地服务器进程来获取信息?

jstatd仅用于提供对本地java进程的远程访问,而不能用于提供对本地java进程的本地访问吗?

我正在运行Ubuntu。 我的问题来自https://stackoverflow.com/a/55669949/156458。谢谢。

1 个答案:

答案 0 :(得分:4)

jps通过扫描/tmp/hsperfdata_<username>目录来查找正在运行的Java进程。每个基于HotSpot的Java进程都会在该目录中创建一个文件,其名称等于进程ID。

文件/tmp/hsperfdata_<username>/<pid>包含JVM导出的各种计数器。这些计数器可以由外部进程读取。 jstat就是这样工作的。我在JavaMagazine article中介绍了jvmstat性能计数器。

因此,jstat始终可以读取本地Java进程的计数器,但是为了能够监视远程计算机,jstatd必须处于运行状态。

jmapjstackjinfo使用动态附加机制。这些实用程序通过UNIX域套接字连接到目标JVM,并将相应的命令发送到JVM。该命令由远程JVM本身执行。在this answerthis presentation中找到有关动态附加的更多信息。