17

OutOfMemoryErrorを検出し、ヒープ ダンプを取り、Java プログラムを自動的に終了したいと考えています。JVM に次のコマンドライン引数があるとします。

-XX:OnOutOfMemoryError="kill -9 %p"
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/tmp

どっちが先?プロセスはメモリをダンプしてから終了しますか、それともその逆ですか?

4

5 に答える 5

8

より決定論的に順序付けを処理するスクリプトを呼び出すことに頼りたいと思います。

-XX:OnOutOfMemoryError="/<SomeStandardLocation>/heapAndQuit.sh"

heapAndQuit.sh は、メソッドを使用しpidて現在のプロセスを見つけます。pid を特定する簡単な方法の 1 つは、プロセスが書き込んでいるログ ファイルの場所を使用することです。

lsof | grep /var/tmp/<yourlogfileName> | cut -d " " -f1 | uniq

jmap次に、ダンプに使用し、kill -9その後

于 2013-10-17T18:39:14.867 に答える
1

これは、使用している実際の JVM 実装に大きく依存すると思います。使用中の JVM は何らかのインテリジェントな順序付けを採用しており、マシンを強制終了するのではなく、最初にヒープ ダンプを実行していると思います。ただし、私の意見では、オプションの順序に依存するべきではありません。

于 2013-10-17T17:57:28.433 に答える