无法打开套接字文件的原因是什么:转储JVM时进程没有响应?

问题描述:

我运行命令:无法打开套接字文件的原因是什么:转储JVM时进程没有响应?

jstack 1234 > threadDump.tdump 

在一个Java进程的PID。我不断收到以下消息:

无法打开套接字文件:目标进程不响应或HotSpot虚拟机未加载 可以使用-f选项时,目标进程没有响应

我不是只是问如何解决,但我想明白为什么我会得到这个信息,因为我从来没有得到过。

我在Unix红帽。

这是如何动态连接工作:(你的情况jstack)工具发送信号(-3)到目标VM。但是在发送信号之前,工具会创建附件文件。当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标志运行虚拟机?在这种情况下,从您的命令行中删除此标志