私はこれを試しました Tomcat 6からJVMでheapdumpを取得します しかし、それは私にとっては機能しません、Tomcatサーバーからヒープダンプを取得する他の方法はありますか?前もって感謝します!
ヒープダンプを取得する最も簡単な方法は、 jmap を使用することです。 Java process execute jmapコマンドを使用するマシンで使用例:
jmap -dump:file=/mnt/heapdump_2013-04-01.data 29842
jps を使用してJava Pid。
jvisualvm を使用してヒープダンプを作成することもできます。 jmx または jstatd を介してリモートマシンに接続できます。 heapdumpを作成してリモートマシンに保存できます。
ヒープダンプを分析するには、次のようにアドバイスできます。 [〜#〜] mat [〜#〜] 。問題をすばやく理解できる非常に強力なツール。 ここ マットの良いインロを見つけることができます。
アプリケーションを長時間停止したくない場合は、バイナリダンプを作成できます( gcoreまたはgdbを使用できます )。そして、あなたは jdbを使ってgdbダンプを分析する することができます。詳細については、 アトラシアンブログ を参照してください。 someissues に注意してください。
Jvisualvmの「Dump heap」ボタン以外の方法として、JMXインターフェースを使用する方法があります。この方法でも、ダンプを保存する場所を指定できます。
jconsoleまたはjvisualvmとJMXプラグインを使用して、TomcatのJMXサーバーに接続します。その後、com.Sun.management
-> HotSpotDiagnotic
-> Operations
。 dumpHeap
の横に2つのパラメーターを入力します。 Oracleのドキュメントから( here を参照):
パラメーター:
outputFile-システムに依存するファイル名
live-trueの場合、ライブオブジェクト、つまり他のユーザーから到達可能なオブジェクトのみをダンプします。
次にdumpHeap
を押して、ダンプの書き込み中にVMがフリーズするのをしばらく待ちます。
私はビジュアルをお勧めしますVM http://visualvm.Java.net/ これは、Tomcatに接続し、ヒープダンプを作成して読み取り、作成できるオールインワンツールですスレッドダンプ、CPU、メモリサンプラー。
新しいjdk 1.7を使用する場合、VisualVMはすでにjdkフォルダーにパッケージ化されています。