com.sun.tools.attach.AttachNotSupportedException:无法打开套接字文件:目标进程无响应或 HotSpot VM 未加载

2024-11-14 08:30:00
admin
原创
18
摘要:问题描述:我在 Linux(ubuntu 64 位)上运行 jmockit 测试时遇到此AttachNotSupportedException 问题。Java 版本为 1.7.0_51。此 JDK 来自 Oracle。测试使用 ant 运行(可能不相关)查看堆栈跟踪。[junit] [junit] java...

问题描述:

我在 Linux(ubuntu 64 位)上运行 jmockit 测试时遇到此AttachNotSupportedException 问题。Java 版本为 1.7.0_51。此 JDK 来自 Oracle。测试使用 ant 运行(可能不相关)

查看堆栈跟踪。

[junit] 
[junit] java.lang.RuntimeException: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit]     at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:89)
[junit]     at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:54)
[junit]     at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:21)
[junit]     at mockit.internal.startup.Startup.initializeIfNeeded(Startup.java:136)
[junit]     at mockit.internal.startup.Startup.initializeIfPossible(Startup.java:169)
[junit]     at junit.framework.TestResult.<clinit>(TestResult.java:15)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:356)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1165)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1016)
[junit] Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit]     at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
[junit]     at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:79)
[junit]     ... 8 more
[junit] Exception in thread "main" java.lang.ExceptionInInitializerError
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRunner.java:356)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTestRunner.java:1165)
[junit]     at org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestRunner.java:1016)
[junit] Caused by: java.lang.RuntimeException: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit]     at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:89)
[junit]     at mockit.internal.startup.JDK6AgentLoader.loadAgent(JDK6AgentLoader.java:54)
[junit]     at mockit.internal.startup.AgentInitialization.initializeAccordingToJDKVersion(AgentInitialization.java:21)
[junit]     at mockit.internal.startup.Startup.initializeIfNeeded(Startup.java:136)
[junit]     at mockit.internal.startup.Startup.initializeIfPossible(Startup.java:169)
[junit]     at junit.framework.TestResult.<clinit>(TestResult.java:15)
[junit]     ... 3 more
[junit] Caused by: com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded
[junit]     at sun.tools.attach.LinuxVirtualMachine.<init>(LinuxVirtualMachine.java:106)
[junit]     at mockit.internal.startup.JDK6AgentLoader.getVirtualMachineImplementationFromEmbeddedOnes(JDK6AgentLoader.java:79)
[junit]     ... 8 more
[junit] Running chs.caf.cap

它似乎与在 IBM JRE 上运行 jMockit 测试时出现的 AttachNotSupportedException有关。但这是在 IBM jre 上。


解决方案 1:

当我尝试使用转储线程时,我遇到了同样的问题jcmd。即使我在用户jcmd下运行,我也收到了相同的错误消息root

您需要jcmd <pid> Thread.print在 下运行same user as java process has,否则您的连接将被断开。Java并不关心您是否是root 用户

基本上来说:

sudo -u <java_process_user> jcmd <pid> Thread.print

解决方案 2:

现在暂时解决这个问题。

添加'-XX:+StartAttachListener'到 jvm 参数解决了该问题。

此处讨论了类似的问题,网址为https://code.google.com/p/jmockit/issues/detail?id=136http://mail.openjdk.java.net/pipermail/macosx-port-dev/2013-October/006098.html (讨论了 jdk7 构建中可能出现的回归)

解决方案 3:

与 @bbarker 一样,我在 JDK 1.8.0_161 上使用 Windows 10 中的 Linux 子系统(“Windows 上的 Ubuntu 上的 Bash”)也遇到了同样的错误。使用上面提到的 JVM 参数配置 Surefire 插件也为我解决了这个问题:

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-surefire-plugin</artifactId>
        <version>2.21.0</version>
        <configuration>
            <argLine>-XX:+StartAttachListener</argLine>
        </configuration>
    </plugin>

但是,即使没有上述操作,也可以从“正常”的 Windows 命令提示符运行测试。

解决方案 4:

我在尝试检查线程死锁时也遇到了类似的问题。您还可以使用命令jcmd <PID> Thread.print在控制台上打印线程转储并检查程序是否存在死锁。您可以查看我的答案,其中包含有关Java 中死锁检测的步骤

解决方案 5:

我遇到了类似的问题,就我而言,将 JDK 供应商从 更改OPENJ9OPENJDK解决了该问题。

解决方案 6:

-F 选项为我解决了这个问题。jcmd -F Thread.print

也可以使用这个:jmap -dump:live,format=b,file=heapdump.hprof -F

相关推荐
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   601  
  华为IPD与传统研发模式的8大差异在快速变化的商业环境中,产品研发模式的选择直接决定了企业的市场响应速度和竞争力。华为作为全球领先的通信技术解决方案供应商,其成功在很大程度上得益于对产品研发模式的持续创新。华为引入并深度定制的集成产品开发(IPD)体系,相较于传统的研发模式,展现出了显著的差异和优势。本文将详细探讨华为...
IPD流程是谁发明的   7  
  如何通过IPD流程缩短产品上市时间?在快速变化的市场环境中,产品上市时间成为企业竞争力的关键因素之一。集成产品开发(IPD, Integrated Product Development)作为一种先进的产品研发管理方法,通过其结构化的流程设计和跨部门协作机制,显著缩短了产品上市时间,提高了市场响应速度。本文将深入探讨如...
华为IPD流程   9  
  在项目管理领域,IPD(Integrated Product Development,集成产品开发)流程图是连接创意、设计与市场成功的桥梁。它不仅是一个视觉工具,更是一种战略思维方式的体现,帮助团队高效协同,确保产品按时、按质、按量推向市场。尽管IPD流程图可能初看之下显得错综复杂,但只需掌握几个关键点,你便能轻松驾驭...
IPD开发流程管理   8  
  在项目管理领域,集成产品开发(IPD)流程被视为提升产品上市速度、增强团队协作与创新能力的重要工具。然而,尽管IPD流程拥有诸多优势,其实施过程中仍可能遭遇多种挑战,导致项目失败。本文旨在深入探讨八个常见的IPD流程失败原因,并提出相应的解决方法,以帮助项目管理者规避风险,确保项目成功。缺乏明确的项目目标与战略对齐IP...
IPD流程图   8  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用