как отлаживать SIGSEGV в jvm GCTaskThread

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

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

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

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

ИЗМЕНИТЬ:

ОС: SUSE Linux Enterprise Server 10 (x86_64)

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

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


person ekeren    schedule 10.01.2011    source источник


Ответы (3)


Ошибки в коде 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

person Nikesh PL    schedule 11.01.2011
comment
Спасибо, проблема в том, что в продакшене такое случается редко, и этот флаг для этого не подходит. когда я использую его в своей тестовой среде, я не получаю никаких ошибок, все равно спасибо и +1 - person ekeren; 12.01.2011
comment
не могли бы вы сказать мне ОС, версию Java и поставщика? - person Nikesh PL; 12.01.2011
comment
добавлено в исходный пост, спасибо - person ekeren; 12.01.2011
comment
Проверка JNI не помогла, запущу баунти - person ekeren; 16.02.2011
comment
Если вы получаете дамп стека, то обычно вы можете найти код JNI, который может быть виноват. Вот сообщение о том, как это сделать: wig-wag.com/devblog/?p= 51 Но если это происходит из JVM, это не сработает... - person EdH; 16.10.2011

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

person abdollar    schedule 23.02.2011
comment
Спасибо за Ваш ответ. Я не могу воспроизвести его в своей среде разработки, я не могу позволить себе запускать valgrind на рабочем сервере. - person ekeren; 23.02.2011
comment
valgrind будет ловить перезапись памяти, которая может быть безвредной (например, если вы не видите проблем с перезаписью) в среде разработки, но вызывает проблемы в производстве - запустите ее в разработке - вот для чего она. - person abdollar; 23.02.2011

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

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

person Musannif Zahir    schedule 23.02.2011
comment
не воспроизводимо, это перестало происходить, когда я отключил гиперпоточность на машине. как вы думаете, что я увижу с подробным выводом: gc. - person ekeren; 23.02.2011
comment
Возможно, вы сможете увидеть, какая фаза или сценарий вызывает конкретную проблему, а затем сузить собственные библиотеки, специфичные для этих задач. - person Musannif Zahir; 23.02.2011