首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >尝试开始JFR录制时的AttachNotSupportedException

尝试开始JFR录制时的AttachNotSupportedException
EN

Stack Overflow用户
提问于 2017-01-18 00:35:40
回答 3查看 3.5K关注 0票数 2

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

代码语言:javascript
复制
jcmd 3658 JFR.start maxsize=100M filename=jfr_1.jfr dumponexit=true settings=profile

输出:

代码语言:javascript
复制
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

代码语言:javascript
复制
$ 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)
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 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

票数 7
EN

Stack Overflow用户

发布于 2017-09-05 01:29:15

凭个人经验..。当开发环境被划分为多个分区,并且操作系统所在的分区与操作系统分区不同时,也会出现此问题。例如,操作系统分区是EXT4,开发环境分区是NTFS (其中JVM是)。因为无法创建文件"/tmp/.java_pid6024“(其中6024是java进程的PID )而出现问题。要排除故障,请在-XX或应用程序服务器的开头添加JVM:+ StartAttachListener。

票数 1
EN

Stack Overflow用户

发布于 2017-12-06 08:09:51

另一种可能是:你的应用程序运行在systemd下,带有'PrivateTmp=yes‘。这会阻止/tmp/.java_pid1234文件被找到。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41702332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档