web-dev-qa-db-ja.com

com.Sun.tools.attach.AttachNotSupportedException:ソケットファイルを開くことができません:ターゲットプロセスが応答しないか、HotSpot VMがロードされていません

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 に関連しているようです。ただし、これはIBMjreにあります。

13
Jayan

今のところ回避してください。

Jvm引数に'-XX:+StartAttachListener'を追加すると、問題が修正されました。

同様の問題については、 https://code.google.com/p/jmockit/issues/detail?id=136 および http://mail.openjdk.Java)で説明しています。 net/pipermail/macosx-port-dev/2013-October/006098.html (jdk7ビルドで発生する可能性のあるリグレッションについて説明しています)

20
Jayan

私の答えは少し無関係ですが、jcmdを使用してスレッドをダンプしようとしたときに同じ問題が発生しました。 rootユーザーでjcmdを実行していても、同じエラーメッセージが表示されていました。

Java processと同じユーザー)の下でjcmd <pid> Thread.dumpを実行する必要があります。そうしないと、接続が切断されます。Java =あなたがrootであるかどうかは関係ありません。

だから基本的に:

Sudo -u <Java_process_user> jcmd <pid> Thread.dump
21
message

@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コマンドプロンプトからテストを実行すると、上記がなくても機能します。

1
Erik Finnman