0

通常,我使用 jstack 来检查 java 进程是否正常工作。虽然我发现,当/tmp/java_pid<num>(num是java进程的pid)socket文件被删除时,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 进程,这是一个非常糟糕的解决方案。

谢谢!

4

1 回答 1

1

/tmp/.java_pid套接字由 HotSpot动态附加机制使用。这是jstack其他实用程序与 JVM 通信的方式。

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

jstack -F完全不同的方式工作。

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

于 2015-08-25T10:01:00.783 回答