Linux系統(tǒng)死機(jī)的軟硬件問題分析
系統(tǒng)出現(xiàn)死機(jī),一般分為兩種情況:一是硬件問題;二是軟件問題。
一、硬件問題
可以考慮分析以下幾點(diǎn):
1、不要超頻CPU,如果已經(jīng)超頻的先回復(fù)到原來的頻率
雖然平時(shí)運(yùn)行沒有問題,但可能在高負(fù)載的使用中就會(huì)出現(xiàn)不可預(yù)料的故障了。特別是Linux系統(tǒng)在某些應(yīng)用上,是可以把硬件的性能發(fā)揮到極限的,但這樣的硬件運(yùn)行Windows可能是沒有問題的。
2、確認(rèn)電源供電充足
必須確保在高負(fù)載的狀態(tài)下,電源可以滿足負(fù)載。
3、使用memtest86檢查內(nèi)存狀態(tài)
4、恢復(fù)BIOS到默認(rèn)狀態(tài)
對(duì)于服務(wù)器,可以使用自帶的監(jiān)測(cè)工具進(jìn)行測(cè)試,也是一個(gè)不錯(cuò)的排錯(cuò)方法。
二、軟件問題
如果已經(jīng)基本排除硬件問題,那我們就必須考慮從軟件上去獲得死機(jī)狀態(tài)的系統(tǒng)信息了。
1、運(yùn)氣足夠好的話,系統(tǒng)死機(jī)不一定是完全死掉(此時(shí)鍵盤可能還能響應(yīng)),那我們就可以使用Sysrq大法。
前提是我們必須先打開sysrq功能:
#echo "1" > /proc/sys/kernel/sysrq
#setterm-blank
這樣,當(dāng)系統(tǒng)出現(xiàn)問題的時(shí)候,我們可以使用:
引用
Alt+Sysrq-T 獲得進(jìn)程系統(tǒng)堆棧信息
Alt+Sysrq-M 獲得內(nèi)存分配信息
Alt+Sysrq-W 獲得當(dāng)前寄存器信息
更多的熱鍵可以參考系統(tǒng)上的/usr/src/linux/Documentaion/sysrq.txt
其中,setterm -blank可以關(guān)閉字符下定時(shí)黑屏保護(hù),方便記錄屏幕信息。
2、為了讓屏幕顯示更多的內(nèi)核調(diào)試信息,可以修改控制臺(tái)的顯示模式為80x25,在/boot/grub/menu.lst中對(duì)應(yīng)的kernel一行最后,增加vga=0x305,如:
引用
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root="/LABEL"=/1 vga="0x305"
3、萬一鍵盤也不幸死掉了,那我們只能采用串口方式,把系統(tǒng)信息發(fā)送到另一臺(tái)系統(tǒng)上,方法:
修改/boot/grub/menu.lst文件,在kernel一行最后增加核心參數(shù)"console=ttyS0 console="tty1"",如:
引用
kernel /boot/grub/vmlinuz-2.4.21-9.30AXsmp ro root="/LABEL"=/1 console="ttyS0" console="tty1"
然后,修改/etc/sysconfig/syslog,加入klogd選項(xiàng)"-c 7",如:[!--empirenews.page--]
引用
KLOGD_OPTIONS="-x -c 7"
重啟服務(wù)器;進(jìn)行測(cè)試:
1)使用串口直連線連接客戶機(jī)和服務(wù)器,在客戶機(jī)上運(yùn)行:
cat /dev/ttyS0
服務(wù)器上運(yùn)行:
echo hi > /dev/ttyS0
如果客戶機(jī)有"hi"輸出即可。
2)服務(wù)器上運(yùn)行:
echo w > /proc/sysrq-trigger
看看客戶機(jī)上是否有相應(yīng)的內(nèi)核信息輸出
3)服務(wù)器上運(yùn)行:
modprobe loop
看看客戶機(jī)上是否有相應(yīng)的內(nèi)核信息輸出
如果測(cè)試都通過的話,那么在客戶機(jī)上運(yùn)行:
cat /dev/ttyS0 | tee /tmp/result
當(dāng)死機(jī)出現(xiàn)的時(shí)候,我們就可以從客戶機(jī)上看到需要的內(nèi)核信息了(查看/tmp/result)。
三、總結(jié)
一般造成Linux系統(tǒng)死機(jī)的原因有:
系統(tǒng)硬件問題(SCSI卡,主板,RAID卡,HBA卡,網(wǎng)卡,硬盤等)
外圍硬件問題(網(wǎng)絡(luò)等)
軟件問題(系統(tǒng)、應(yīng)用軟件)
驅(qū)動(dòng)bug(找新的驅(qū)動(dòng))
核心系統(tǒng)bug(到LKML看看,或更換核心再試)
系統(tǒng)設(shè)置(恢復(fù)到缺省狀態(tài),關(guān)閉防火墻等)