java - 无法打开套接字文件: process not responding while Dumping the JVM?的原因是什么

标签 java sockets unix jvm jvm-hotspot

我正在运行命令:

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/

相关文章:

java - 无法使用 PreparedStatement 的 getGeneratedKeys() 在 Java 中找到生成的 key

java - AEM CQ 等待工作流完成

java - 如何从 map 中获取特定的键和值

java - 聊天程序: Client to Server Connectivity Issue

sockets - Bluez 核心干扰 HCI 套接字命令

linux - 从 shell 变量中解析数据并使用新数据重用变量

java - 循环和重新分配值

c - 是否有检查名为 sptr 的 sockaddr* 是否指向 ipv4 或 ipv6 地址的函数?

linux - 使用 AWK 根据列数过滤行

linux - Unix消息队列