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


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!