【问题标题】:How do jps, jinfo, jstat, jmap and jstack get information about local Java processes?jps、jinfo、jstat、jmap和jstack如何获取本地Java进程的信息?
【发布时间】:2019-04-13 21:46:06
【问题描述】:

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

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

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

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

【问题讨论】:

  • 为什么同一个问题要问两次?你为什么要两次问同一个问题?
  • 对您的误解深表歉意。

标签: java linux process jvm


【解决方案1】:

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 中查找有关动态附加的更多信息。

【讨论】:

  • 实用程序是否总是通过 Unix 域套接字连接到目标 JVM? @apangin
  • @MS90 在 JDK 8 和更早版本中,jmapjstack 具有强制模式 -F。在这种模式下,他们使用的 Serviceability Agent 的工作方式完全不同。链接的答案和演示文稿有更多详细信息。 jinfo 在 JDK 9 之前也使用了 Serviceability Agent。从 JDK 9 开始,这些实用程序总是连接到 Linux 和 macOS 上的套接字,或者在 Windows 上运行远程线程。
  • 感谢您的友好和知识共享的回答,@apangin。继续努力。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
  • 2023-03-07
相关资源
最近更新 更多