web-dev-qa-db-ja.com

Tomcat 7の実行からヒープダンプを取得する方法

私はこれを試しました Tomcat 6からJVMでheapdumpを取得します しかし、それは私にとっては機能しません、Tomcatサーバーからヒープダンプを取得する他の方法はありますか?前もって感謝します!

11
emdhie

ヒープダンプを取得する最も簡単な方法は、 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 に注意してください。

21
Taky

Jvisualvmの「Dump heap」ボタン以外の方法として、JMXインターフェースを使用する方法があります。この方法でも、ダンプを保存する場所を指定できます。

jconsoleまたはjvisualvmとJMXプラグインを使用して、TomcatのJMXサーバーに接続します。その後、com.Sun.management-> HotSpotDiagnotic-> OperationsdumpHeapの横に2つのパラメーターを入力します。 Oracleのドキュメントから( here を参照):

パラメーター:

outputFile-システムに依存するファイル名

live-trueの場合、ライブオブジェクト、つまり他のユーザーから到達可能なオブジェクトのみをダンプします。

次にdumpHeapを押して、ダンプの書き込み中にVMがフリーズするのをしばらく待ちます。

5
piet.t

私はビジュアルをお勧めしますVM http://visualvm.Java.net/ これは、Tomcatに接続し、ヒープダンプを作成して読み取り、作成できるオールインワンツールですスレッドダンプ、CPU、メモリサンプラー。

新しいjdk 1.7を使用する場合、VisualVMはすでにjdkフォルダーにパッケージ化されています。

1
Alireza Fattahi