Сбой JVM с G1 GC и библиотекой

У нас возникает следующая проблема: На некоторых машинах с Linux приложения Java, использующие библиотеку trove и G1 GC, довольно быстро завершают работу с сообщениями следующего типа:

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 немедленно решает проблему. Мы используем библиотеку trove в соответствии с решением Maven, пробовали несколько версий, включая 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;

Снова, переключение на GC кроме G1 поможет. Оставьте G1, но избавьтесь от библиотеки Trove, и проблема также исчезнет. К сожалению, мне не удалось создать минимальный набор тестов, поэтому сложно подать разумный отчет об ошибке. Есть какие-нибудь идеи по поводу причины или идеи, которые могли бы помочь мне построить набор тестов?

2 ответа

Решение

Похоже, что это действительно ошибка JDK, https://bugs.openjdk.java.net/browse/JDK-8023472, исправленная в Java 7, обновление 65+.

G1GC не "готов к использованию" в Java 6; Только в Java 7u4 он наконец стал готовым к работе. См. http://phosphor-escence.blogspot.com/2012/05/java7u4-enables-g1gc-without.html для заметки об этом, и, конечно же, есть еще что-то о Google.

Другие вопросы по тегам