2017-01-17 9 views
1

JFR録音を開始しようとしたときにAttachNotSupportedExceptionが届いています。 これまでは正常に動作していました。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) 

起こっされることがありますか?

SO:OracleのLinuxサーバが考えられる理由の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) 
+0

[この質問](http://stackoverflow.com/questions/26140182/running-jmap-getting-unable-to-open-socket-file)を参照してください。 Javaプロセスと同じユーザが 'jcmd'を実行していることを確認してください。 '/ tmp'ディレクトリに書き込み可能であることを確認してください。また、ターゲットJVMがハングアップしている場合、 'jcmd'は動作しません。 – apangin

+0

@apangin 'jcmd'が同じユーザーによって実行されている場合、/ tmpは書き込み可能であり、JVMはハングしません。 – hbelmiro

+0

Javaプロセスはchrootまたはcgroupsで動作していますか? – apangin

答えて

2

一つを解放すること(1234 JavaプロセスのPIDです)/tmp/.java_pid1234ファイルが削除されたことです。

動的接続機構(jstack、jmap、jcmd、jinfo)に依存するツールは、/tmpで作成されたUNIXドメインソケットを通じてJVMと通信します。 このソケットは、最初の接続試行時に遅延して作成されるか、-XX:+StartAttachListenerフラグが指定されている場合にJVM初期化時に熱心に作成されます。

ソケットに対応するファイルが削除されると、ツールはターゲットプロセスに接続できません。残念ながら、JVMを再起動せずに通信ソケットを再作成する方法はありません。

ダイナミックアタッチメントメカニズムの説明については、this answerを参照してください。

0

個人的な経験...この問題は、開発環境がパーティションに分割され、オペレーティングシステムが配置されているパーティションがオペレーティングシステムパーティションと異なる場合にも発生します。たとえば、オペレーティングシステムパーティションはEXT4で、開発環境パーティションはNTFS(JVMがある)です。問題は、ファイル "/tmp/.java_pid6024"(6024はJavaプロセスのPID)を作成できないために発生します。 JVMまたはアプリケーションサーバーの先頭にある-XX:+ StartAttachListenerをトラブルシューティングするには

0

別の可能性:あなたのアプリは 'PrivateTmp = yes'でsystemdの下で実行されています。これにより、/tmp/.java_pid1234ファイルが検出されなくなります。

関連する問題