OutOfMemoryError
を検出し、ヒープ ダンプを取り、Java プログラムを自動的に終了したいと考えています。JVM に次のコマンドライン引数があるとします。
-XX:OnOutOfMemoryError="kill -9 %p"
-XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/usr/tmp
どっちが先?プロセスはメモリをダンプしてから終了しますか、それともその逆ですか?
より決定論的に順序付けを処理するスクリプトを呼び出すことに頼りたいと思います。
-XX:OnOutOfMemoryError="/<SomeStandardLocation>/heapAndQuit.sh"
heapAndQuit.sh は、メソッドを使用しpid
て現在のプロセスを見つけます。pid を特定する簡単な方法の 1 つは、プロセスが書き込んでいるログ ファイルの場所を使用することです。
lsof | grep /var/tmp/<yourlogfileName> | cut -d " " -f1 | uniq
jmap
次に、ダンプに使用し、kill -9
その後
これは、使用している実際の JVM 実装に大きく依存すると思います。使用中の JVM は何らかのインテリジェントな順序付けを採用しており、マシンを強制終了するのではなく、最初にヒープ ダンプを実行していると思います。ただし、私の意見では、オプションの順序に依存するべきではありません。