как отлаживать SIGSEGV в jvm GCTaskThread - PullRequest
4 голосов
/ 10 января 2011

Мое приложение испытывает наличные в производстве.Дамп сбоя указывает на то, что в GCTaskThread произошел SIGSEGV

. Он использует JNI, поэтому может быть какой-то источник повреждения памяти, хотя я не уверен.

Как я могу отладить эту проблему- Я хотя бы делал -XX: OnError ... но я не уверен, что поможет мне отладить это.

Также, могут ли некоторые из вас привести конкретный пример того, как код JNI может привести к сбою GC с SIGSEGV

РЕДАКТИРОВАТЬ :

ОС: SUSE Linux Enterprise Server 10 (x86_64)

vm_info: 64-разрядный сервер Java HotSpot (TM) VM (11.0-b15) для linux-amd64 JRE (1.6.0_10-b33), построенного 26 сентября 2008 года 01:10:29 пользователем "java_re" с gcc 3.2.2 (SuSE Linux)

РЕДАКТИРОВАТЬ : Проблемы перестают возникать после того, как мы отключаем гиперпоточность, есть мысли?

Ответы [ 3 ]

2 голосов
/ 11 января 2011

Ошибки в коде JNI могут возникать несколькими способами:

The program crashes during execution of a native method (most common).
The program crashes some time after returning from the native method, often during GC (not so common).
Bad JNI code causes deadlocks shortly after returning from a native method (occasional).

Если вы считаете, что у вас есть проблема со взаимодействием между написанным пользователем собственным кодом и JVM (то есть проблемой JNI), вы можете запустить диагностику, которая поможет вам проверить переходы JNI. вызвать эту диагностику; укажите опцию -Xcheck: jni при запуске JVM.

Опция -Xcheck: jni активирует набор функций-оболочек для функций JNI. Функции-обертки выполняют проверку входящих параметров. Эти проверки включают в себя:

Whether the call and the call that initialized JNI are on the same thread.
Whether the object parameters are valid objects.
Whether local or global references refer to valid objects.
Whether the type of a field matches the Get<Type>Field or Set<Type>Field call.
Whether static and nonstatic field IDs are valid.
Whether strings are valid and non-null.
Whether array elements are non-null.
The types on array elements.

Пожалуйста, прочитайте следующие ссылки http://publib.boulder.ibm.com/infocenter/javasdk/v5r0/index.jsp?topic=/com.ibm.java.doc.diagnostics.50/html/jni_debug.html http://www.oracle.com/technetwork/java/javase/clopts-139448.html#gbmtq

1 голос
/ 23 февраля 2011

Используйте valgrind. Это звучит как повреждение памяти. Вывод будет подробным, но попытайтесь изолировать отчет в библиотеке JNI, если это возможно.

0 голосов
/ 23 февраля 2011

Поскольку неисправный поток выглядит как GCTaskThread, пытались ли вы включить verbose:gc и проанализировать вывод (предпочтительно используя графический инструмент, такой как самурай и т. Д.)? Можете ли вы выделить конкретную библиотеку после изучения файла hs_err?

Кроме того, не могли бы вы предоставить больше информации о причинах проблемы и о том, легко ли ее воспроизвести?

...