系統出現宕機,一般分為兩種情況:一是硬體問題;二是軟體問題。
一、硬體問題
可以考慮分析以下幾點:
1、不要超頻CPU,如果已經超頻的先回復到原來的頻率
雖然平時執行沒有問題,但可能在高負載的使用中就會出現不可預料的故障了。特別是linux系統在某些應用上,是可以把硬體的效能發揮到極限的,但這樣的硬體執行Windows可能是沒有問題的。
2、確認電源供電充足
必須確保在高負載的.狀態下,電源可以滿足負載。
3、使用memtest86檢查記憶體狀態
4、恢復BIOS到預設狀態
對於服務器,可以使用自帶的jian測工具進行測試,也是一個不錯的排錯方法。
二、軟體問題
如果已經基本排除硬體問題,那我們就必須考慮從軟體上去獲得宕機狀態的系統資訊了。
1、運氣足夠好的話,系統宕機不一定是完全死掉(此時鍵盤可能還能響應),那我們就可以使用Sysrq大法。
前提是我們必須先開啟sysrq功能:
#echo "1" > /proc/sys/kernel/sysrq
#setterm -blank
這樣,當系統出現問題的時候,我們可以使用:
引用
Alt+Sysrq-T 獲得程序系統堆疊資訊
Alt+Sysrq-M 獲得記憶體分配資訊
Alt+Sysrq-W 獲得當前暫存器資訊
更多的熱鍵可以參考系統上的/usr/src/linux/Documentaion/
其中,setterm -blank可以關閉字元下定時黑屏保護,方便記錄螢幕資訊。
2、為了讓螢幕顯示更多的核心除錯資訊,可以修改控制檯的顯示模式為80x25,在/boot/grub/中對應的kernel一行最後,增加vga=0x305,如:
引用
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=/LABEL=/1 vga=0x305
3、萬一鍵盤也不幸死掉了,那我們只能採用串列埠方式,把系統資訊傳送到另一臺系統上,方法:
修改/boot/grub/檔案,在kernel一行最後增加核心引數"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選項"-c 7",如:
引用
KLOGD_OPTIONS="-x -c 7"
重啟伺服器;進行測試:
1)使用串列埠直連線連線客戶機和伺服器,在客戶機上執行:
cat /dev/ttyS0
伺服器上執行:
echo hi > /dev/ttyS0
如果客戶機有"hi"輸出即可。
2)伺服器上執行:
echo w > /proc/sysrq-trigger
看看客戶機上是否有相應的核心資訊輸出
3)伺服器上執行:
modprobe loop
看看客戶機上是否有相應的核心資訊輸出
如果測試都通過的話,那麼在客戶機上執行:
cat /dev/ttyS0 | tee /tmp/result
當宕機出現的時候,我們就可以從客戶機上看到需要的核心資訊了(檢視/tmp/result)。
三、總結
一般造成Linux系統宕機的原因有:
系統硬體問題(SCSI卡,主機板,RAID卡,HBA卡,網絡卡,硬碟等)
外圍硬體問題(網路等)
軟體問題(系統、應用軟體)
驅動bug(找新的驅動)
核心系統bug(到LKML看看,或更換核心再試)
系統設定(恢復到預設狀態,關閉防火牆等)