9

次の問題があります:一部の Linux マシンでは、Trove ライブラリと G1 GC を使用する Java アプリケーションが、次のタイプのメッセージでかなり高速にクラッシュします。

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

 SIGSEGV (0xb) at pc=0x00002aaaaaef81d1, pid=31063, tid=1141000512

JRE version: 6.0_29-b11
Java VM: Java HotSpot(TM) 64-Bit Server VM (20.4-b02 mixed mode linux-amd64 )
Problematic frame:
J  gnu.trove.impl.hash.TObjectHash.insertKey(Ljava/lang/Object;)I

ここで気になるのは、問題のあるフレームです。これは常に同じです。ここに表示されるライブラリには慣れていますが、実際の Java コードには慣れていません。奇妙なことに、同一の設定が必要な一部のマシンは影響を受けません。Windows では、これも見たことがありません。この問題は、最近の Java 7 バージョンでも引き続き発生します。G1 GC から他の GC に切り替えると、問題はすぐに解決します。Maven によって解決された Trove ライブラリを使用し、3.0.3 を含むいくつかのバージョンを試しましたが、常に同じ問題が発生します。

これの理由が何であるか知っている人はいますか?既知の G1 GC バグはありますか? trove は、この問題を引き起こす可能性のある特別な方法でコンパイルされていますか?

更新: 別のアプリケーション、別のサーバー、最新の Java (7u5)、同様の問題:

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

SIGSEGV (0xb) at pc=0x00002aadb7a38093, pid=14100, tid=46925573367184

JRE version: 7.0_05-b05
Java VM: Java HotSpot(TM) 64-Bit Server VM (23.1-b03 mixed mode linux-amd64 compressed oops)
Problematic frame:
J  gnu.trove.map.hash.THashMap.put(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;

ここでも、G1 以外の GC に切り替えると効果的です。G1 を保持し、Trove ライブラリを削除すると、問題も解消されます。残念ながら、最小限のテスト スイートを作成できなかったため、適切なバグ レポートを提出することは困難です。原因に関するアイデア、またはテストスイートの構築に役立つアイデアはありますか?

4

2 に答える 2

3

G1GC は Java 6 で「すぐに使える」状態ではありません。最終的に本番環境に対応できるようになったのは、Java 7u4 だけです。それに関するメモについては、 http://phosphor-escence.blogspot.com/2012/05/java7u4-enables-g1gc-without.htmlを参照してください。もちろん、Google にはさらに多くの情報があります。

于 2012-07-02T12:13:50.453 に答える