我正在运行命令:
jstack 1234 > threadDump.tdump
Java 进程的 PID。我不断收到以下消息:
无法打开套接字文件:目标进程没有响应或 HotSpot VM 未加载 当目标进程没有响应时可以使用-F选项
我不只是问如何解决,但我想了解为什么我收到此消息,因为我过去从未收到过它。
我使用的是 Unix Red Hat。
最佳答案
这就是动态附加的工作原理:工具(在您的例子中是 jstack )向目标虚拟机发送信号(-3)。但在发送信号之前,工具将创建附加文件。当VM收到信号时,就会搜索该文件。如果文件存在,那么它将创建unix套接字。同时工具将等待该套接字的创建。如果该文件不存在,它将打印此错误消息。
您可以在 sun.tools.attach.LinuxVirtualMachine
中找到此代码(工具部分)。该文件来自 jdk_home/lib/tools.jar 文件。
os.cpp 中的热点部分 signal_thread_entry
代码,AttachListener::init
。
我认为由于某种原因,vm 无法在 5 秒内创建套接字文件(这是默认超时,可以通过 -Dsun.tools.attach.attachTimeout
属性进行更改)。或者也许您使用 -XX:+ReduceSignalUsage 标志运行 vm?在这种情况下,从命令行中删除此标志
关于java - 无法打开套接字文件: process not responding while Dumping the JVM?的原因是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38526741/