JBossのヒープダンプにHeapDumpOnOutOfMemoryErrorパラメータを使用する


182

-XX:+HeapDumpOnOutOfMemoryErrorアプリケーションでメモリ不足エラーが発生したときに、ヒープダンプを取得するために、JVM起動オプションにパラメーターを私のJBoss起動スクリプトに追加できると言われました。このデータがどこにダンプされるのかと思っていましたか?それはコンソールだけですか、それともログファイルですか?コンソールのみの場合、コンソールからUnixサーバーにログインしていない場合はどうなりますか?


1
それが現在のフォルダだと思います。
Valentin Tihomirov

回答:


246

ここでは何のOracleのマニュアルを言うことがあります。

デフォルトでは、ヒープダンプは、上記の例のように、VMの作業ディレクトリにあるjava_ pid .hprof というファイルに作成されます。-XX:HeapDumpPath=オプションで代替のファイル名またはディレクトリを指定できます。たとえば-XX:HeapDumpPath=/disk2/dumps 、ヒープダンプが/disk2/dumps ディレクトリに生成されます。


16
すべてのVMのパフォーマンス関連のオプションアウトこれもリスト:java.sun.com/javase/technologies/hotspot/...
ラヴィ・グプタ

4
重要!HeapDumpフラグは、Java 1.5.0_07からのみ使用できます。
rustyx 2012

14
また、JVMがの既存のヒープダンプを上書きしないことを認識することも重要です。標準出力にHeapDumpPath似たものが表示さ"Unable to create /tmp/java_pidpid.hprof: File exists"れます。ダンプファイルをダンプパスの外に移動して、将来のダンプファイルへの道を空けてください。また<pid>、ファイル名のプレースホルダーを使用して、ファイル名のエントロピーを増やします。
ベン

1
とても役に立ちました。Eclipse Memory Analyzerでリークを見つけるのにほんの数分しかかかりませんでした。
Aron Lorincz 2015年

システムに存在しないフォルダへのパスを指定するとどうなりますか?それはフォルダーを作成し、そのフォルダー内にハンプダンプをプッシュしますか?
Vinit89

47

このダンプは、UNIXコンソールから表示できます。

ヒープダンプのパスは、上記の変数を配置した直後の変数として提供されます。

例えば:

-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=${DOMAIN_HOME}/logs/mps"

上記のパスのコンソールからダンプを表示できます。


4

「VMの作業ディレクトリ」が何を意味するのか解読するのは難しいと思いました。私の例では、Javaサービスラッパープログラムを使用してjarを実行していました。ダンプファイルは、ラッパープログラムを配置したディレクトリ(c:\ myapp \ binなど)に作成されました。私がこれを発見した理由は、ファイルが非常に大きくなる可能性があり、私がそれらの場所を発見する前にハードドライブをいっぱいにしたためです。


作業ディレクトリは、pwdx <PID>コマンドで確認できます。まず、ps -ef |を実行します javaをgrepし、JavaアプリのPIDを見つけて、pwdx <PID>を実行します。作業ディレクトリがわかります。
RCG 2018

2

「-XX:HeapDumpPath」オプションを使用していない場合、JBoss EAP / Asの場合、デフォルトではヒープダンプファイルが「JBOSS_HOME / bin」ディレクトリに生成されます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.