通常在出現系統崩潰后,大家會擔心再次出現故障,但是發現系統各日志中并沒有記錄到任何死機前后的信息,無法分析故障原因,認為已經無藥可救。但是,實際上,Linux 有多種機制來保證發生系統崩潰后,可以獲取有價值的信息用以分析問題。確定是硬件故障,還是應用程序bug 導致的。
Linux 中,有如下幾種方法來獲取各種崩潰時產生的信息。
1.Core dump
Core dump 通常用來調試應用程序錯誤,當某些應用程序運行出現異常崩潰時,可以開啟系統的 core dump 功能,來得到一個程序崩潰時的內存信息,用來分析崩潰原因:
在/etc/profile里加上(或者修改)一條:
運行命令:
sysctl -w "kernel.core_name_format=/coredump/%n.core"
|
該命令意思是指core文件放在/coredump目錄下,文件名是進程名+.core
2.Diskdump
diskdump工具提供了在單機上創建和采集vmcore(kernel dump)的能力,而無須使用網絡。當內核本身出現崩潰的時候,當前的內存和CPU狀態以及相關的信息都會被保存到一個支持diskdump的磁盤上的保留分區上。在下一次重新啟動的時候,當系統重新啟動,diskdump的初始化腳本會從保留分區中讀取保存的信息并創建一個vcore文件,然后這個文件被再次存放到/var/crash/目錄下,文件名為127.0.0.1-
如下是一個配置 HP SCSI 設備上啟用 diskdump 的過程,如果不是 HP SCSI 設備(即設備名為 /dev/sdX的形式),則無須執行第三、四兩個步驟。但需要在第一步前先執行命令: modprobe
diskdump
第一步:編輯 /etc/sysconfig/diskdump文件,將一個空白分區的設備名填入后保存退出,例如:
第二步:初使化 dump 設備
#service diskdump initialformat
|
警告:該分區的所以數據會丟失。
第三步:使用 cciss_dump 模塊替換當前的 cciss 模塊:
在 /etc/modprobe.conf 找到如下行:
alias scsi_hostadapter cciss
|
修改為:
alias scsi_hostadapter cciss_dump
|
再增加一行:
options cciss_dump dump_drive=1
|
注:假設diskdump文件中配置的為 /dev/cciss/c0d[#a]p[#b], 請設置為:
options cciss_dump dump_drive=[#a]
|
第四步:重建 initrd 文件:
#mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old
#mkinitrd /boot/initrd-`uname -r`.img `uname -r`
|
第五步:設置 diskdump 服務能夠開機自啟動: