记录一个JVM crash(jdk1.8.0_31版本bug)

现象

ider更新代码使用jrebel热部署代码。tomcat崩溃,并报以下错误:

#
# A fatal error has been detected by the Java Runtime Environment:
#
#  EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x0000000075744686, pid=18436, tid=9956
#
# JRE version: Java(TM) SE Runtime Environment (8.0_31-b13) (build 1.8.0_31-b13)
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.31-b07 mixed mode windows-amd64 compressed oops)
# Problematic frame:
# V  [jvm.dll+0x4c4686]
#
# Core dump written. Default location: C:\java\tomcat\apache-tomcat-8.5.34-windows-x64\apache-tomcat-8.5.34\bin\hs_err_pid18436.mdmp
#
# If you would like to submit a bug report, please visit:
#   http://bugreport.java.com/bugreport/crash.jsp
#

具体在tomcat生成三个文件中hs_err_pid18436.log可以查看详情

在这里插入图片描述

分析

  • EXCEPTION_ACCESS_VIOLATION表示jvm crash时正在执行jvm自身的代码,这往往是因为jvm的bug导致的crash。

  • 出现crash时jvm正在执行的代码。V代表 VMframe

    # Problematic frame:
    # V  [jvm.dll+0x4c4686]
    
  • 导致crash的线程信息。线程类型是JavaThread,JavaThread表示执行的是java线程。线程名为C2 CompilerThread2

    Current thread (0x000000002118e000):  JavaThread "C2 CompilerThread2" daemon [_thread_in_native, id=9956, stack(0x0000000022aa0000,0x0000000022ba0000)]
    

由上面三个信息猜想是jvm自身的bug。到Java Bug Database查询是否有相关记录。查询关键字为

V  [jvm.dll+0x4c4686]

找到bug id为8169194。https://bugs.java.com/bugdatabase/view_bug.do?bug_id=8169194 。里面的错误信息跟我比较相似
在这里插入图片描述
。所以暂时断定发生的错误跟其一致。而底下的回复说这个bug是jdk本身的bug,并且在8u112版本已经修复了。
在这里插入图片描述

解决方法

升级jdk版本1.8.0_31到1.8.0_231。因为本人对jvm不甚了解,这个只是我暂时用于解决问题。后续再观察一段时间看看,如果不再出现这个问题的话。那就说明我的猜想成功,就是jdk自身的问题。

另外生成mdmp文件。
在这里插入图片描述
是因为我在ider添加vm参数:-XX:+CreateMinidumpOnCrash
在这里插入图片描述

posted @ 2022-10-24 20:56  享受生活2023  阅读(140)  评论(0编辑  收藏  举报