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

时间:2016-07-22 12:41:49

标签: java sockets unix jvm jvm-hotspot

我正在运行命令:

jstack 1234 > threadDump.tdump

在Java进程的PID上。我一直收到以下消息:

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

我不是在问如何解决,但我想知道为什么我会收到这条消息,因为我过去从未得到过这个消息。

我在Unix Red Hat上。

1 个答案:

答案 0 :(得分:1)

这是动态附着的工作原理:工具(在你的情况下为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标志运行vm?在这种情况下,从命令行中删除此标志