Случайный сбой JVM со стеком, отображающим только данные Hibernate

Для нашего веб-приложения мы регулярно испытываем сбои JVM. До сих пор мы понятия не имеем, что может быть точной причиной проблемы.

Кажется, что все сбои имеют один и тот же "проблемный кадр", что заставляет нас подозревать, что они очень похожи и связаны друг с другом. Проблемный фрейм находится внутри кода Hibernate, однако, похоже, что в коде JNI нет никаких следов.

Если мы запустим тот же код с активным флагом -Xint (отключит JIT), у нас больше не будет проблемы.

Наша версия Hibernate - 3.6.7.

У кого-нибудь есть предложения, где мы могли бы посмотреть дальше о причинах этой проблемы?

Спасибо!

Отчет JVM:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x00000000022b5be6, pid=2960, tid=1736
#
# JRE version: 6.0_21-b07
# Java VM: Java HotSpot(TM) 64-Bit Server VM (17.0-b17 mixed mode windows-amd64 )
# Problematic frame:
# J  org.hibernate.type.descriptor.java.MutableMutabilityPlan.deepCopy(Ljava/lang/Object;)Ljava/lang/Object;
#
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x0000000008d35000):  JavaThread "http-8002-6" daemon [_thread_in_Java, id=1736, stack(0x000000000a980000,0x000000000a9c0000)]

siginfo: ExceptionCode=0xc0000005, reading address 0xffffffffffffffff

Registers:
EAX=0x00000001038a6ca8, EBX=0x00000001038de1e0, ECX=0x0000000000000018, EDX=0x3e64492f3c202020
ESP=0x000000000a9bb0f0, EBP=0x000000008e4e0678, ESI=0x00000000b2f9dc30, EDI=0x0000000001d0dd10
EIP=0x00000000022b5be6, EFLAGS=0x0000000000010246

Top of Stack: (sp=0x000000000a9bb0f0)
0x000000000a9bb0f0:   0000000000f55e63 00000000b0dd1830
0x000000000a9bb100:   00000000b353bbf8 000000000a9bb108
0x000000000a9bb110:   00000001000167f5 000000008e4e1220
0x000000000a9bb120:   00000001040b8278 0000000000000000
0x000000000a9bb130:   0000000001d0dd10 00000000b0540968
0x000000000a9bb140:   000000000a9bb180 00000000b2f9dd00
0x000000000a9bb150:   000000008e4e0678 0000000001c6db68
0x000000000a9bb160:   00000000b053ec30 00000000b0dd1830
0x000000000a9bb170:   00000000b2f9dd00 0000000001d882f0
0x000000000a9bb180:   000000110000000f 00000000b2f9dc30
0x000000000a9bb190:   000000008e481a20 000000008e2b5180
0x000000000a9bb1a0:   000000008e481a20 000000008e2b5180
0x000000000a9bb1b0:   000000008e4e1220 0000000000000078
0x000000000a9bb1c0:   000000000a9bb1f0 0000000107623440
0x000000000a9bb1d0:   0000000001d97634 000000008e4e1160
0x000000000a9bb1e0:   0000000107623440 0000000001d97678 

Instructions: (pc=0x00000000022b5be6)
0x00000000022b5bd6:   62 8e 03 01 00 00 00 4d 3b d3 0f 85 b7 01 00 00
0x00000000022b5be6:   4c 8b 52 38 49 bb 38 01 30 00 01 00 00 00 4d 3b 


Stack: [0x000000000a980000,0x000000000a9c0000],  sp=0x000000000a9bb0f0,  free space=ec0000000000000000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
J  org.hibernate.type.descriptor.java.MutableMutabilityPlan.deepCopy(Ljava/lang/Object;)Ljava/lang/Object;

2 ответа

Решение

Независимо от причины, это не должно происходить на JVM. Я хотел бы предложить самое простое решение - обновить вашу JVM до последней версии.

Обратите внимание, что Java 6 уже подошел к концу, и вы, вероятно, должны работать на виртуальной машине Java 7. Однако это более масштабное обновление, и вам, возможно, следует запланировать время для его тестирования. Однако я ожидаю, что обновление Java 6 баллов будет тривиальным.

Он пытается сделать "mov r10,QWORD PTR [rdx+0x38]"

Без карты памяти (которую вы не предоставили) трудно сказать, что находится по адресу 0x3e64492f3c202020 + 0x38. более того, 3e64492f3c202020 больше похож на текст ">dI/<", а не на адрес.

Я предлагаю вам обновить JVM и проверить свою оперативную память.

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