当JVM处于负载状态时,我们正在观察JVM崩溃。它崩溃了
siginfo:si_signo = SIGSEGV:si_errno = 0,si_code = 1(SEGV_MAPERR),si_addr = 0x0000000000000000
当执行Object.notify()方法时,HandleMarkCleaner :: ~HandlerMarkCleaner()总是失败。
Stack: [0x00007fc178052000,0x00007fc178153000], sp=0x00007fc178151560, free space=1021k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V [libjvm.so+0x34a10f] HandleMarkCleaner::~HandleMarkCleaner()+0x1f
V [libjvm.so+0x58f3ce] JVM_MonitorNotify+0xba
J java.lang.Object.notify()V
Java frames: (J=compiled Java code, j=interpreted, Vv=VM code)
J java.lang.Object.notify()V
J com.ibm.mq.jmqi.local.LocalHconn.leaveCall()V
j com.ibm.mq.jmqi.local.LocalMQ$4.run()V+230
J com.ibm.mq.jmqi.JmqiWorkerThread.run()V
j java.lang.Thread.run()V+11
v ~StubRoutines::call_stub
环境
了解OpenJDK HandleMarkCleaner源代码
class HandleMarkCleaner: public StackObj {
private:
Thread* _thread;
public:
HandleMarkCleaner(Thread* thread) {
_thread = thread;
_thread->last_handle_mark()->push();
}
~HandleMarkCleaner() {
_thread->last_handle_mark()->pop_and_restore();
}
private:
inline void* operator new(size_t size, void* ptr) {
return ptr;
}
};
它出现,不知何故
HandleMarkCleaner对象中的_Thread
指针变得无效。有没有人遇到过这样的JVM崩溃?如果您知道如何解决此问题,请建议。
谢谢, Vaibhav的