php エディタ Xigua が答えを提供します。JVM が SIGSEGV クラッシュに遭遇した場合、迅速に終了するためのいくつかの措置を講じることができます。まず、JVM パラメータ -XX: CrashOnOutOfMemoryError を設定すると、メモリがオーバーフローしたときに JVM がクラッシュしてすぐに終了します。次に、Java の例外処理メカニズムを使用して SIGSEGV 例外をキャッチし、例外をキャッチした後に System.exit() メソッドを呼び出してプログラムを終了できます。さらに、JNI インターフェイスを使用してオペレーティング システムと対話し、オペレーティング システムが提供する exit メソッドを呼び出して迅速に終了することもできます。つまり、JVM パラメータを適切に設定し、適切な例外処理メカニズムを使用することで、SIGSEGV クラッシュ後に JVM を迅速に終了し、プログラムの安定性と信頼性を向上させることができます。
tensorflow java の問題により、サービスの 1 つが頻繁にクラッシュします。私たちはそれを許容できます (多くの場合、k8s が再起動します)。問題は、jvm が終了するまでに数分かかることです。ネイティブ コードで sigsegv を強制的に高速終了する方法はありますか?
リーリー ###数分後:###corrupted size vs. prev_size while consolidating # # a fatal error has been detected by the java runtime environment: # # sigsegv (0xb) at pc=0x00007fe4f321a898, pid=1, tid=545 # # jre version: openjdk runtime environment zulu21.28+85-ca (21.0+35) (build 21+35) # java vm: openjdk 64-bit server vm zulu21.28+85-ca (21+35, mixed mode, sharing, tiered, compressed oops, compressed class ptrs, g1 gc, linux-amd64) # problematic frame: # c [libc.so.6+0x28898] abort+0x178 # # core dump will be written. default location: /data/core # # an error report file with more information is saved as: # /data/hs_err_pid1.log解決策
これにより、エラー レポートやコア ダンプを作成せずに、sigsegv 上で jvm が即時に強制終了されます。それでも致命的なエラー メッセージを表示したい場合は、
-xx:suppressfatalerrormessage を -xx:errorlogtimeout=1
に置き換えます。 この JVM はかなり大きなヒープ (> 64 GB) で実行されているのではないかと思われます。非常に多くのメモリを使用するプロセスの場合、コア ダンプ ファイルを書き出すのに少し時間がかかります。
これにかかる数分の間に、上記の場所でコア ダンプ ファイルが成長しているのが確認できる場合があります (これは、この理論を確認する簡単な方法です)。
解決策は、コア ダンプ ファイルの作成を無効にすることです。詳細は特定のオペレーティング システムによって異なります (ただし、コア ダンプは、ほとんどすべての UNIX ベースのオペレーティング システムで無効にすることができます)。 さらに、その特定の場所にファイル システム関連のボトルネックが存在し、コア ダンプの書き込みが予想より遅くなる可能性があります。
以上がSIGSEGV のクラッシュ後に JVM をすぐに終了するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。