1. 程式人生 > >JVM致命錯誤日誌(hs_err_pid.log)解讀

JVM致命錯誤日誌(hs_err_pid.log)解讀

致命錯誤出現的時候,JVM生成了hs_err_pid<pid>.log這樣的檔案,其中往往包含了虛擬機器崩潰原因的重要資訊。因為經常遇到,在這篇文章裡,我挑選了一個,並且逐段分析它包含的內容(檔案可以在文章最後下載)。預設情況下檔案是建立在工作目錄下的(如果沒許可權建立的話JVM會嘗試把檔案寫到/tmp這樣的臨時目錄下面去),當然,檔案格式和路徑也可以通過引數指定,比如:

1 java -XX:ErrorFile=/var/log/java/java_error%p.log

這個檔案將包括:

  • 觸發致命錯誤的操作異常或者訊號;
  • 版本和配置資訊;
  • 觸發致命異常的執行緒詳細資訊和執行緒棧;
  • 當前執行的執行緒列表和它們的狀態;
  • 堆的總括資訊;
  • 載入的本地庫;
  • 命令列引數;
  • 環境變數;
  • 作業系統CPU的詳細資訊。

首先,看到的是對問題的概要介紹:

1 #  SIGSEGV (0xb) at pc=0x03568cf4, pid=16819, tid=3073346448

一個非預期的錯誤被JRE檢測到,其中:

  • SIGSEGV是訊號名稱
  • 0xb是訊號碼
  • pc=0x03568cf4指的是程式計數器的值
  • pid=16819是程序號
  • tid=3073346448是執行緒號

如果你對JVM有了解,應該不會對這些東西陌生。

接下來是JRE和JVM的版本資訊:

1 2 3 # JRE version: 6.0_32-b05
# Java VM: Java HotSpot(TM) Server VM (20.7-b02 mixed mode linux-x86 )

執行在mixed模式下。

然後是問題幀的資訊:

1 2 3 # Problematic frame: # C  [libgtk-x11-2.0.so.0+0x19fcf4]  __float128+0x19fcf4
  • C:幀型別為本地幀,幀的型別包括:
    • C:本地C幀
    • j:解釋的Java幀
    • V:虛擬機器幀
    • v:虛擬機器生成的存根棧幀
    • J:其他幀型別,包括編譯後的Java幀
  • libgtk-x11-2.0.so.0+0x19fcf4:和程式計數器(pc)表達的含義一樣,但是用的是本地so庫+偏移量的方式。

接下去第一部分是執行緒資訊:

1 Current thread (0x09f30c00):  JavaThread "main" [_thread_in_native, id=16822, stack(0xb72a8000,0xb72f9000)]

當前執行緒的:

  • 0x09f30c00:指標
  • JavaThread:執行緒型別,可能的型別包括:
    • JavaThread
    • VMThread
    • CompilerThread
    • GCTaskThread
    • WatcherThread
    • ConcurrentMarkSweepThread
  • main:名字
    • _thread_in_native:執行緒當前狀態,狀態列舉包括:
    • _thread_uninitialized:執行緒還沒有建立,它只在記憶體原因崩潰的時候才出現
    • _thread_new:執行緒已經被建立,但是還沒有啟動
    • _thread_in_native:執行緒正在執行原生代碼,一般這種情況很可能是原生代碼有問題
    • _thread_in_vm:執行緒正在執行虛擬機器程式碼
    • _thread_in_Java:執行緒正在執行解釋或者編譯後的Java程式碼
    • _thread_blocked:執行緒處於阻塞狀態
    • …_trans:以_trans結尾,執行緒正處於要切換到其它狀態的中間狀態
  • id=16822:執行緒ID
  • 0xb72a8000,0xb72f9000:棧區間
1 siginfo:si_signo=SIGSEGV: si_errno=0, si_code=1 (SEGV_MAPERR), si_addr=0x00000010

這部分是導致虛擬機器終止的非預期的訊號資訊,含義前面已經大致提到過了。其中si_errno和si_code是Linux下用來鑑別異常的,Windows下是一個ExceptionCode。

1 2 3 EAX=0x00000000, EBX=0x0375dd84, ECX=0x00000000, EDX=0x00000000 ESP=0xb72f0fa0, EBP=0xb72f0fb8, ESI=0x00000000, EDI=0x0a6c1800 EIP=0x03568cf4, EFLAGS=0x00010246, CR2=0x00000010

這是暫存器上下文。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Top of Stack: (sp=0xb72f0fa0) 0xb72f0fa0:   00000000 00402250 0040217f 0375dd84 0xb72f0fb0:   00000000 0a6c1800 b72f0fe8 0356c2c0 0xb72f0fc0:   00000000 0a6c1800 b72f0fe8 003b3e77 0xb72f0fd0:   003e6c8b 0a1a70d0 0a193358 0375dd84 0xb72f0fe0:   0a276418 0a276418 b72f1048 03536c56 0xb72f0ff0:   0acad000 0b3ca978 0000000c 00dd0674 0xb72f1000:   00000003 0a2c7d50 b72f1038 0000330c 0xb72f1010:   ffffffff ffffffff 00000001 00000001 Instructions: (pc=0x03568cf4) 0x03568cd4:   89 14 24 89 75 f8 89 d6 89 7d fc 89 c7 e8 7e 1b 0x03568ce4:   ea ff 89 34 24 89 87 d4 02 00 00 e8 30 00 ea ff 0x03568cf4:   8b 40 10 89 3c 24 c7 44 24 08 00 00 00 00 89 87 0x03568d04:   d0 02 00 00 8b 83 88 24 00 00 89 44 24 04 e8 dd

棧頂程式計數器旁的操作碼,它們可以被反彙編成系統崩潰前執行的指令。

1 2 3 4 5 6 7 8 9 10 Register to memory mapping: EAX=0x00000000 is an unknown value EBX=0x0375dd84: <offset 0x394d84> in

相關推薦

JVM致命錯誤日誌hs_err_pid.log解讀

致命錯誤出現的時候,JVM生成了hs_err_pid<pid>.log這樣的檔案,其中往往包含了虛擬機器崩潰原因的重要資訊。因為經常遇到,在這篇文章裡,我挑選了一個,並且逐段分析它包含的內容(檔案可以在文章最後下載)。預設情況下檔案是建立在工作目錄下的(如果沒許可權建立的話JVM會嘗試把檔案寫到

JVM致命錯誤日誌(hs_err_pid.log)分析

nco ots 堆棧 升級 boot 原因 enc 崩潰原因 minor 當jvm出現致命錯誤時,會生成一個錯誤文件 hs_err_pid<pid>.log,其中包括了導致jvm crash的重要信息,可以通過分析該文件定位到導致crash的根源,從而改善以保證

MySQL二進制日誌binary log總結

何事 mysqld 支持 col mysql數據庫 內存大小 報錯 正常 ora 本文出處:http://www.cnblogs.com/wy123/p/7182356.html (保留出處並非什麽原創作品權利,本人拙作還遠遠達不到,僅僅是為了鏈接到原文,因為後續對可

簡練網軟考知識點整理-項目問題日誌Issue Log

-o 日誌 tle img 知識 通過 ima 1.5 控制 問題日誌用於記錄和監督問題的解決。它可用來促進溝通,確保對問題的共同理解。問題日誌強調幹系人的關註,強調溝通。 輸出和更新問題日誌的過程有:監控項目工作(更新)、管理項目團隊(更新)、管理溝通(更新

如何使用應用日誌Application Log

轉載: SAP的應用日誌(Application Log)是用於建立,儲存和分析系統訊息的工具. 相關TCODE: SLG0: Creation of Object and Sub object SLG1: Display Application Logs 相關建

MySQL中的重做日誌redo log,回滾日誌undo log,以及二進位制日誌binlog的簡單總結

MySQL中有六種日誌檔案, 分別是:重做日誌(redo log)、回滾日誌(undo log)、二進位制日誌(binlog)、錯誤日誌(errorlog)、慢查詢日誌(slow query log)、一般查詢日誌(general log),中繼日誌(relay log)。 其中重做日誌和回滾日誌與

獲取iOS裝置上崩潰日誌Crash Log的方法

我們常常會遇到iPhone手機或者iPad平板上執行APP崩潰的問題,有時候開啟某個APP,卻一下子“閃退”了。有的再次進入就正常了,有些可能就再也進不去了。 對於開發者來說,這個絕對是頭疼的問題。因為這些日誌可能存在於用的裝置裡面。那麼如何獲取到iOS裝置崩潰日誌呢?

MySQL重做日誌redo log

前面介紹了三種日誌:[error log](https://www.cnblogs.com/liang24/p/14072666.html)、[slow log](https://www.cnblogs.com/liang24/p/14079272.html)、[binlog](https://www.cnb

Oracle數據庫運維:要對監聽日誌文件listener.log進行定期清理,如果不定期清理,會遇到下面一些麻煩

tab 額外 機器 寫入 bpa 性能 connect user ini 原文鏈接: http://www.lookdaima.com/WebForms/WebPages/Blanks/Pm/Docs/DocItemDetail.aspx?EmPreviewTypeV=2&

apache2.2服務無法啟動 發生服務特定錯誤:1 的解決辦法 windows服務錯誤 日誌查看方法

管理器 tps httpd com tail 文件 電腦 fix apache2 轉 https://blog.csdn.net/liuensong/article/details/6738041 查錯過程: 1、查看apache錯誤日誌:目錄下的apache/

Java效能分析及問題解決(二)jvm致命錯誤導致程序直接掛掉,錯誤日誌分析及解決

前言:   最近伺服器一臺機器,經常發現jvm錯誤日誌,因為程式有監控,所以程序能夠自動啟動,沒有產生什麼大的影響,利用空閒時間分析下這個問題以及給出最後的解決方案: jvm出現的致命錯誤,會在預設工

異常的數字拋出,為什麽會出現錯誤未解決

為什麽 class a light divide true vid main catch blog #include <iostream> using namespace std; class A { public: A(int a, int b) {

oracle 12C RAC 集群日誌cluster log)目錄

oracle 12C RAC 集群日誌([grid@shurkcs ~]$ adrci ADRCI: Release 12.2.0.1.0 - Production on Thu Mar 1 09:25:45 2018 Copyright (c) 1982, 2017, Oracle and/or its a

PokeCats開發者日誌十二

class ats 日誌 tle oom title 技術分享 img 版權 ??現在是PokeCats遊戲開發的第六十一天的晚上,終於拿到軟著權登記證書了! ??看來易版權確實是個值得信賴的代辦機構呢,400塊花的不冤。 PokeCats開發者日誌(十二)

Pandas錯誤筆記持續更新

class shel dataframe 字典 dst max 生成 ram val 更新至2018.5.1 字典生成DataFrame 今天一個字典生成一個DataFrame,采用了以下形式,每一個value都是一個數(不是vector) df = pd.DataFram

實訓日誌第二日

lips linux mes 沒有 mys 開啟 cell 安裝 body 今天學 習過程 和小結 Linux安裝Tomcat和Mysql Linux下安裝ssh Eclipse中maven的使用配置 Ubuntu中eclipse的安裝配置 使用Xshe

Python花式錯誤集錦長期更新

留言 int 項目 add encoding ror 操作 pat oba Python是一門靈活的,有意思的,用途廣泛的語言。近些年來,收到越來越多的重視。也有越來越多的人來學習這門語言。 於是,問題來了,對於初學者,往往在寫代碼的過程中,出現這樣或那樣的錯誤,導致程序運

Jvm垃圾回收器終結篇

掃描 star rem 提前 判斷 清除 png 重要 處的 Jvm垃圾回收目前就準備了這三篇博文進行整理,在寫博文的過程中我也是邊看邊記載的,我覺得這種學習方式更容易讓人記住,不會輕易忘記。以前的學習模式都是看PDF文檔、看書等,但是有個缺點就是當時記住了過段時間就會忘記

JVM調優總結十一-反思

垃圾回收的悖論     所謂“成也蕭何敗蕭何”。Java的垃圾回收確實帶來了很多好處,為開發帶來了便利。但是在一些高效能、高併發的情況下,垃圾回收確成為了制約Java應用的瓶頸。目前JDK的垃圾回收演算法,始終無法解決垃圾回收時的暫停問題,因為這個暫停嚴重影響了程式

Nginx 切割日誌多域名

  1、使用切割日誌時,多個日誌檔案,使用kill -USR1 `cat ${pid_path}` 不管用,解決方法:直接使用nginx過載配置檔案 示例如下:   [[email protected] shell