jvm - 尝试开始 JFR 记录时出现 AttachNotSupportedException

标签 jvm jmc jfr

我在尝试开始 JFR 记录时收到 AttachNotSupportedException。 直到现在它都正常工作。

jcmd 3658 JFR.start maxsize=100M filename=jfr_1.jfr dumponexit=true settings=profile

输出:

3658:
com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
        at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
        at sun.tools.attach.LinuxAttachProvider.attachVirtualMachine(LinuxAttachProvider.java:63)
        at com.sun.tools.attach.VirtualMachine.attach(VirtualMachine.java:208)

可能会发生什么?

SO:Oracle Linux 服务器 6.7 版

$ java -version
java version "1.8.0_102"
Java(TM) SE Runtime Environment (build 1.8.0_102-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.102-b14, mixed mode)

最佳答案

其中一个可能的原因是 /tmp/.java_pid1234 文件已被删除(其中 1234 是 Java 进程的 PID)。

依赖于动态附加机制的工具(jstack、jmap、jcmd、jinfo)通过在 /tmp 中创建的 UNIX 域套接字与 JVM 通信。 如果指定了 -XX:+StartAttachListener 标志,则此套接字由 JVM 在第一次连接尝试时懒惰地创建,或者在 JVM 初始化时急切地创建。

一旦socket对应的文件被删除,工具就无法连接到目标进程,不幸的是,如果不重启JVM,就无法重新创建通信socket。

有关动态附加机制的说明,请参阅 this answer .

关于jvm - 尝试开始 JFR 记录时出现 AttachNotSupportedException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41702332/

相关文章:

java - 如果我使用 -D 设置系统属性,我可以从我的代码中访问它吗?

java - 64 位升级后关闭 Tomcat JVM 服务的时间更长

java - Java Mission Control 中的 JConsole 插件

Java 飞行记录器 : Does it need JMX readwrite access or is readonly enough?

Cooja 模拟器中的 Java 结果 134

java - 仅在 Windows 上从 JRE 获取堆转储

Java Mission Control 中的空格是什么意思?

java - GenCollectForAllocation 是什么意思?

java - 有没有办法检查特定的 jdk(Oracle 或 OpenJDK)是否支持 Java Flight Recorder?

java.security.Provider.getService(String, String) Java 监视器被阻止