为什么在 /tmp/.java_pid<num> 套接字文件被删除后 jstack 不工作

why jstack not working when the /tmp/.java_pid<num> socket file has been deleted

一般我都是用jstack来检测java进程是否正常。虽然我发现,当 /tmp/java_pid<num>(num 是 java 进程的 pid)套接字文件已被删除时,jstack 将无法工作。像这样:

[xxx]$ jstack -l 5509

5509: Unable to open socket file: target process not responding or HotSpot VM not loaded
The -F option can be used when the target process is not responding

(PS。我不想用“-F”,可能还有其他问题)

有没有办法改变套接字文件位置(不是/tmp)?或者在发现不存在时再次生成套接字文件?现在我所做的是再次重新启动 java 进程,这是一个非常糟糕的解决方案。

谢谢!

/tmp/.java_pid 套接字被 HotSpot Dynamic Attach 机制使用。这是 jstack 和其他实用程序与 JVM 通信的方式。

您无法更改路径 - 它已硬编码在 JVM 源代码中。您也不能强制 JVM 重新生成它,因为 Attach Listener 在 HotSpot 生命周期中只初始化一次。

jstack -F.

中工作

为了检查Java进程是否正常,我建议使用JMX remote