我正在运行命令:
jstack 1234 > threadDump.tdump
在Java进程的PID上。我一直收到以下消息:
无法打开套接字文件:目标进程未响应或未加载HotSpot VM 当目标进程没有响应时,可以使用-F选项
我不是在问如何解决,但我想知道为什么我会收到这条消息,因为我过去从未得到过这个消息。
我在Unix Red Hat上。
答案 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?在这种情况下,从命令行中删除此标志