本文首先介紹了 crash 的基本概念和安裝方法,其次詳細介紹了如何使用 crash 工具分析內核崩潰轉儲檔,包括各種常用調試命令的使用方法,最後以幾個實際工作中遇到的真實案例向讀者展示了 crash 的強大功能。 在這篇文章中,既有詳細的工具使用方法,又有豐富的實際HTTP://www.aliyun.com/zixun/aggregation/7734.html">案例分析,相信您讀過以後定會受益匪淺。
什麼是 crash
如前文所述,當 linux 系統內核發生崩潰的時候,可以通過 kdump 等方式收集內核崩潰之前的記憶體,生成一個轉儲檔 vmcore。 內核開發者通過分析該 vmcore 檔就可以診斷出內核崩潰的原因,從而進行作業系統的代碼改進。 那麼 crash 就是一個被廣泛使用的內核崩潰轉儲檔分析工具,掌握 crash 的使用技巧,對於定位問題有著十分重要的作用。
使用 crash 的先決條件
由於 crash 用於調試內核崩潰的轉儲檔,因此使用 crash 需要依賴如下條件:
1. kernel 映射檔 vmlinux 在編譯的時候必須指定了 -g 參數,即帶有調試資訊。
2. 需要有一個記憶體崩潰轉儲檔(例如 vmcore),或者可以通過 /dev/mem 或 /dev/crash 訪問的即時系統記憶體。 如果 crash 命令列沒有指定轉儲檔,則 crash 預設使用即時系統記憶體,這時需要 root 許可權。
3. crash 支援的平臺處理器包括:x86, x86_64, ia64, ppc64, arm, s390, s390x ( 也有部分 crash 版本支援 Alpha 和 32-bit PowerPC,但是對於這兩種平臺的支援不保證長期維 護 )。
4. crash 支援 2.2.5-15(含)以後的 Linux 內核版本。 隨著 Linux 內核的更新,crash 也在不斷升級以適應新的內核。
crash 安裝指南
要想使用 crash 調試內核轉儲檔,需要安裝 crash 工具和內核調試資訊包。 不同的發行版本安裝包名稱略有差異,這裡僅列出 RHEL 和 SLES 發行版本對應的安裝包名稱如下:
表 1. crash 工具和內核調試包
系統版本 crash 工具名稱 內核調試資訊包 RHEL6.2 crash kernel-debuginfo-common
kernel-debuginfo SLES11SP2 crash kernel-default-debuginfo
kernel-ppc64-debuginfo
以 RHEL 為例,安裝 crash 及內核調試資訊包的步驟如下:
rpm -ivh crash-5.1.8-1.el6.ppc64.rpm rpm -ivh kernel-debuginfo-common-ppc64-2.6.32-220.el6.ppc64.rpm rpm -ivh kernel-debuginfo-2.6.32-220.el6.ppc64.rpm
啟動 crash
啟動參數說明
使用 crash 調試轉儲檔,需要在命令列輸入兩個參數:debug kernel 和 dump file,其中 dump file 是內核轉儲檔的名稱,debug kernel 是由內核調試資訊包安裝的,不同的發行版本名稱略有不同,以 RHE L 和 SLES 為例:
RHEL6.2:/usr/lib/debug/lib/modules/2.6.32-220.el6.ppc64/vmlinux SLES11SP2:/usr/lib/debug/boot/ vmlinux-3.0.13-0.27-ppc64.debug
使用 crash -h 或 man crash 可以查看 crash 支援的一系列選項,這裡僅以常用的選項為例說明如下:
-h:列印説明資訊
-d:設置調試級別
-S:使用 /boot/System.map 作為預設的映射檔
-s:不顯示版本、初始調試資訊等,直接進入命令列
-i file:啟動之後自動運行 file 中的命令,再接受使用者輸入