我在尝试开始 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 .