Случайный сбой 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 и проверить свою оперативную память.