我在尝试开始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)可能会发生什么?
因此: Oracle Linux Server版本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)发布于 2017-01-19 00:41:05
可能的原因之一是/tmp/.java_pid1234文件已被删除(其中1234是一个Java进程的PID )。
依赖于动态连接机制(jstack、jmap、jcmd、jinfo)的工具通过在/tmp创建的UNIX域套接字与JVM通信。这个套接字是由JVM在第一次连接尝试时延迟创建的,或者在指定了-XX:+StartAttachListener标志的情况下在JVM初始化时急切地创建。
一旦与套接字对应的文件被删除,工具就无法连接到目标进程,并且不幸的是,在不重新启动JVM的情况下无法重新创建通信套接字。
有关动态附加机制的说明,请参见this answer。
发布于 2017-09-05 01:29:15
凭个人经验..。当开发环境被划分为多个分区,并且操作系统所在的分区与操作系统分区不同时,也会出现此问题。例如,操作系统分区是EXT4,开发环境分区是NTFS (其中JVM是)。因为无法创建文件"/tmp/.java_pid6024“(其中6024是java进程的PID )而出现问题。要排除故障,请在-XX或应用程序服务器的开头添加JVM:+ StartAttachListener。
发布于 2017-12-06 08:09:51
另一种可能是:你的应用程序运行在systemd下,带有'PrivateTmp=yes‘。这会阻止/tmp/.java_pid1234文件被找到。
https://stackoverflow.com/questions/41702332
复制相似问题