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 回答
3

看来这确实是一个 JDK 错误,https://bugs.openjdk.java.net/browse/JDK-8023472,由 Java 7 update 65+ 修复。

于 2015-02-02T18:59:00.463 回答