歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux管理 >> Linux問題解決

Linux操作系統死機處理方法總結

        通常在出現系統崩潰後,大家會擔心再次出現故障,但是發現系統各日志中並沒有記錄到任何死機前後的信息,無法分析故障原因,認為已經無藥可救。但是,實際上,Linux 有多種機制來保證發生系統崩潰後,可以獲取有價值的信息用以分析問題。確定是硬件故障,還是應用程序bug 導致的。

Linux 中,有如下幾種方法來獲取各種崩潰時產生的信息。

1.Core dump

Core dump 通常用來調試應用程序錯誤,當某些應用程序運行出現異常崩潰時,可以開啟系統的 core dump 功能,來得到一個程序崩潰時的內存信息,用來分析崩潰原因:

在/etc/profile裡加上(或者修改)一條:

ulimit -c 0

運行命令: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文件,將一個空白分區的設備名填入後保存退出,例如:

DEVICE=/dev/cciss/c0d0p2

第二步:初使化 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 服務能夠開機自啟動:

# chkconfig diskdump on

3.Netdump

如果使用紅旗DC4.0 或 3.0 版本系統,是不能支持 diskdump 的,可以利用netdump 來達到輸出vmcore 的目的。但是Netdump要求至少有一個服務器以及任意數目的客戶端。服務器用來接收客戶端死機時的信息,客戶端是經常死機的機器。 

(一)服務器配置:

(1).檢驗netdump服務器是否安裝完畢:

rpm -q netdump-server

如果未安裝,請在光盤 RedFlag/RPMS/ 目錄中找到 netdump-server 打頭的軟件包,執行命令:

rpm -ivh netdump-server-x.x.x.rpm (x為版本號)

進行安裝。

(2).服務器包安裝後,用命令:

passwd netdump

更改用戶的密碼.

(3).打開服務:

chkconfig netdump-server on

(4).運行服務器:

service netdump-server start

(二)客戶端配置:

(1).校驗客戶端是否已安裝

rpm -q netdump

如果未安裝,在光盤 RedFlag/RPMS/ 目錄中找到 netdum 打頭的軟件包,執行命令:

rpm -ivh netdump-x.x.x.rpm (x為版本號)

安裝.

(2).編輯文件/etc/sysconfig/netdump,添加如下行:

DEV=eth0

NETDUMPADDR=172.16.81.182

NETDUMPMACADDR=00:0C:29:79:F4:E0

172.16.81.182指 netdump 服務器地址。

(3).運行下面的命令,出現提示符時輸入密碼:

service netdump propagate

(4).打開客戶端:

chkconfig netdump on

(5).運行客戶端:

service netdump start

(6).測試

為了測試netdump的配置是否正確,在netdump客戶機上做下面操作:

cp /usr/share/doc/netdump-xxxxxx/crash.c .

gcc -DKERNEL -DMODULE -I/lib/modules/$(uname -r)/build/include -c crash.c

insmod ./crash.o

這會造成系統崩潰,你會在netdump服務器的/var/crash/<客戶端IP>/目錄下,看到一個核心轉儲。當客戶機正在轉儲數據到服務器的時候,你會看到一個名叫“vmcore-incomplete"的文件。當轉儲結束後,該文件會改名成 "vmcore"。"vmcore"文件的大小會變化,可能達到幾個GB.在一個內存是512M的系統上,上面的測試會產生大約510M的vmcore文件。

Copyright © Linux教程網 All Rights Reserved