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

7ivaypg9  于 7个月前  发布在  Java
关注(0)|答案(1)|浏览(103)

通常,我使用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)吗?或者当发现socket文件不存在时重新生成socket文件?现在我所做的是重新启动Java进程,这是一个非常糟糕的解决方案。
谢谢你,谢谢

vmjh9lq9

vmjh9lq91#

/tmp/.java_pid套接字用于HotSpot动态连接机制。这是jstack和其他实用程序与JVM通信的方式。
您不能更改路径-它是硬编码在JVM源代码中的。也不能强制JVM重新生成它,因为Attach对象在HotSpot生存期内只初始化一次。
jstack -Fquite different way中工作。
为了检查Java进程是否正常工作,我建议使用JMX remote

**UPDATE:**由于JDK-8225690修复,从JDK 14 / 11.0.13 /8 u332开始,JVM自动重新创建.java_pid attach socket(如果已删除)。

相关问题