2

SIGSEGV を使用して、特定のメソッド (常に同じメソッド) をコンパイルしようとすると、Java アプリケーションがほぼ一貫してクラッシュします。

 A fatal error has been detected by the Java Runtime Environment:

  SIGSEGV (0xb) at pc=0x00002aaaab6642a5, pid=8348, tid=1087596864

 JRE version: 6.0_16-b01
 Java VM: Java HotSpot(TM) 64-Bit Server VM (14.2-b01 mixed mode linux-amd64 )
 Problematic frame:
 V  [libjvm.so+0x5332a5]

 An error report file with more information is saved as:
 hs_err_pid8348.log

 If you would like to submit a bug report, please visit:
   http://java.sun.com/webapps/bugreport/crash.jsp

クラッシュ ログ (興味深い部分...):

 A fatal error has been detected by the Java Runtime Environment:

  SIGSEGV (0xb) at pc=0x00002aaaab6642a5, pid=8348, tid=1087596864

 JRE version: 6.0_16-b01
 Java VM: Java HotSpot(TM) 64-Bit Server VM (14.2-b01 mixed mode linux-amd64 )
 Problematic frame:
 V  [libjvm.so+0x5332a5]

 If you would like to submit a bug report, please visit:
   http://java.sun.com/webapps/bugreport/crash.jsp

---------------  T H R E A D  ---------------

Current thread (0x00002aab1f7ac800):  JavaThread "CompilerThread0" daemon [_thread_in_native, id=8694, stack(0x0000000040c36000,0x00000000
40d37000)]

コア ダンプを作成して接続しようとしましたが、そこに CompilerThread が見つかりませんでした (おそらくは強制終了されている可能性があります)。

4

4 に答える 4

2

ページ全体 (ライブラリに関する追加情報を含む) をスタックなどと一緒に投稿してください。コア ダンプが表示される場合、スレッドはまったく表示されません。

問題に zlib (ZipEntry) が含まれている場合、運が悪くなります... これは非常に大胆な zlip の非常に厄介なバグであり、zip (jar) が開いた後に変更された場合に発生します。Sun/Oracle が zip 処理にネイティブ ライブラリを使用する理由は、純粋に Java で実行する方が安定性が高く、(パフォーマンスに関して) 2 倍高速であるためです。

于 2011-01-16T15:12:14.303 に答える
1

関連するメソッドを手動で最適化します。

Current thread (0x00002aab1f7ac800): JavaThread "CompilerThread0" daemon [_thread_in_native, id=8694, stack(0x0000000040c36000,0x00000000 40d37000)]

この線のすぐ下に、ホットスポットエンジンが最適化しようとした特定の方法が表示されます。ホットスポットで問題のあるコードをヒットした可能性があります。どのコードがヒットしたのか、そしてその理由を正確に特定するのは非常に困難です。

この問題が発生したので、解決しました。関連するメソッドは、最適化されていない方法で作成されました。不要なデータ構造が作成され、追加のループが追加され、追加の変数が作成されて1回だけ使用されました。私はこのメソッドをどんどん最適化し、最後の反復の後で最終的に例外をスローしなくなるまで、かなり低レベルのほとんど気の利いた最適化でした。

結局、ホットスポットエンジンでトリガーされていたある種のバイトコード最適化ルーチンにバグがあったと思います。何が起こっているのかを正確に知る方法はほとんどありません。しかし、コードを手動で最適化することで、ホットスポットエンジンがバグのあるルーチンを実行しなくなるようにバイトコードを最適化したと思います。

これは明確なことではありませんが、私の話があなたと将来の訪問者に役立つことを願っています。頑張ってください!

于 2012-06-11T13:38:52.563 に答える
0

JREバージョン6.0_16はかなり古いものです。現在のJREにアップグレードすることをお勧めします。このクラッシュが修正される可能性が非常に高いです。

于 2011-01-16T13:47:39.323 に答える
0

これがオプションの場合、このパラメーターを Java 実行可能呼び出しに追加することで、クラッシュの原因となっているメソッドをランタイムから除外できます。 -XX:CompileCommand=exclude,com/path/to/class/in/Jar$InnerClassIfAny.methodName

クラッシュの原因となったクラスとメソッドの名前は、クラッシュ レポート (hs_err_pidxxxx.log) の右上にあります。

--------------- P R O C E S S ---------------

マーク。

注: Unix 環境では、内部クラス (存在する場合) は、\$の代わりにこのようにエスケープする必要があり$ます。

于 2011-07-28T12:38:22.233 に答える