記錄一個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
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章