我们遇到以下问题:在我们的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解决的特洛伊库,在那里尝试了几个版本,包括3.0.3 - 总是同样的问题。
有人知道这可能是什么原因吗?任何已知的G1 GC错误?是否以特殊的方式编译了特洛伊,这可能会产生这个问题?
更新:不同的应用程序,不同的服务器,最新的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库,问题也将消失。不幸的是,我无法创建最小的测试套件,因此很难提交合理的错误报告。关于原因的任何想法,或任何可以帮助我构建测试套件的想法?
答案 0 :(得分:3)
G1GC在Java 6中没有“可以使用”;只有在Java 7u4中它才能最终投入生产。有关它的说明,请参阅http://phosphor-escence.blogspot.com/2012/05/java7u4-enables-g1gc-without.html,当然还有更多关于Google的信息。
答案 1 :(得分:3)
看来这确实是一个JDK错误https://bugs.openjdk.java.net/browse/JDK-8023472,由Java 7更新65 +修复。