2017-07-30 24 views
1

私は、メモリリークを調査するのに役立つJavaヒープダンプを取ろうとしています。私はこれを使用するたびに:問題Javaヒープダンプを取る

jmap -J-d64 -dump:format=b,file=myheapdump -F 29498 

ヒープダンプファイルを約16048キロバイトに取得し、成長を停止し、jmapは永遠に実行され、私はそれを殺すしない限り、停止しません。また私は、この使用してみました:

jcmd 29498 -F GC.heap_dump heapdump.hprof 

をしかし、私はルートからそれを実行しておりますので、プロセスが他のユーザから実行されて、私はこれを取得されています

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) 
    at sun.tools.jcmd.JCmd.executeCommandForPid(JCmd.java:147) 
    at sun.tools.jcmd.JCmd.main(JCmd.java:131) 

だから私は、私の質問が何であるかを推測します私は間違っていると、このヒープダンプを取得しようとする前進するための最善の方法は何ですか? jcmd使用しているとき、あなたはこの回答に記載されたJVM引数を追加してみてくださいすることができ、エラーを回避するには

+0

JVMの実行に使用したのと同じユーザーアカウントから 'jmap'(-Fなし)を実行するとどうなりますか? – apangin

+0

ユーザーに許可がない旨のエラーが表示されます – jymbo

+0

どのような権限ですか?ダンプファイルを作成するには?ユーザーに書き込み権限がある別のディレクトリを試してください。 – apangin

答えて

0

com.sun.tools.attach.AttachNotSupportedException: Unable to open socket file: target process not responding or HotSpot VM not loaded

もう一つの可能​​性をあなたがLinuxを使用している場合は、ここで説明したようにgdbツールを使用することです。 https://www.atlassian.com/blog/archives/so-you-want-your-jvms-heap

+0

この引数を追加すると別のエラーが発生します。 jcmd 17272 -XX:+ StartAttachListener GC.heap_dump heapdump。 hprof 17272: java.lang.IllegalArgumentException:不明な診断コマンド – jymbo

+0

@jymbo jcmdコマンド自体に引数を追加したようなエラーメッセージが表示されますか?そのプロセスを起動するときに、ダンプを取得しようとしているプロセスのjavaコマンドにargを追加する必要があります – kingdc