我们有以下问题:在我们的一些Linux机器上,使用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,但去掉特洛伊库,这个问题也会消失。不幸的是,我无法创建一个最小的测试套件,因此很难提交合理的bug报告。对原因有什么想法,或者有什么想法可以帮助我建立测试套件吗?
发布于 2015-02-02 18:59:00
看来这确实是一个JDK bug,https://bugs.openjdk.java.net/browse/JDK-8023472,由Java7更新65+修复。
发布于 2012-07-02 12:13:50
G1GC在Java6中还没有“准备好使用”;只有在Java7u4中,它才最终成为生产准备。请看http://phosphor-escence.blogspot.com/2012/05/java7u4-enables-g1gc-without.html上的笔记,当然还有关于谷歌的更多信息。
https://stackoverflow.com/questions/11293384
复制相似问题