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

时间:2014-08-22 03:11:40

标签: linux java-7 jmockit

我在linux(ubuntu 64bit)上运行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

它似乎与AttachNotSupportedException while running jMockit tests on IBM JRE有关。但这是在IBM jre。

5 个答案:

答案 0 :(得分:18)

暂时解决。

'-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构建中可能出现的回归)

答案 1 :(得分:12)

我的回答会有点不相关,但是在尝试使用jcmd转储线程时遇到了同样的问题。即使我在 root 用户下运行jcmd,也收到​​相同的错误消息。

您需要在与Java进程相同的用户下运行jcmd <pid> Thread.dump,否则您的连接将被断开。 Java不在乎您是否是 root

所以基本上:

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

答案 2 :(得分:1)

与@bbarker一样,我在Windows 10中使用Linux子系统在JDK 1.8.0_161上得到了同样的错误(&#34; Windows上的Bash on Ubuntu&#34;)。使用上面提到的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>

从&#34;正常&#34;运行测试但是,Windows命令提示符在没有上述内容的情况下工作。

答案 3 :(得分:0)

当尝试检查线程死锁时,我也遇到了类似的问题。您还可以使用命令jcmd <PID> Thread.print在控制台上打印线程转储,并检查程序是否有死锁。您可以通过Deadlock detection in Java

上的步骤查看我的答案

答案 4 :(得分:0)

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