为什么在 /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。
一般我都是用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。