Linux 死機通常歸為兩大類:硬體故障與軟體/核心問題。本文構建系統性排查框架,涵蓋硬體壓測、核心熱鍵捕獲、串口控制台、啟動參數調優等進階技術,助你從表象穿透到根因。
memtest86 多輪次(建議 8+ Pass),排除記憶體位元翻轉若硬體無礙,必須在死機發生時捕獲核心狀態。三種遞增深度的方案:
前置啟用:
echo 1 > /proc/sys/kernel/sysrq
setterm -blank 0 # 關閉字元模式螢幕保護,便於記錄
死機時按鍵組合(按住 Alt+SysRq 再按字母):
Alt+SysRq+T:導出所有進程堆疊回溯Alt+SysRq+M:導出記憶體分配資訊Alt+SysRq+W:導出當前 CPU 寄存器狀態完整熱鍵表見 /usr/src/linux/Documentation/sysrq.txt。
步驟 1:擴充主控台解析度
編輯 /boot/grub/menu.lst,kernel 行尾加 vga=0x305(80x25 文字模式,顯示更多行):
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=LABEL=/1 vga=0x305
步驟 2:啟用串口控制台雙輸出
同檔 kernel 行尾加 console=ttyS0 console=tty1:
kernel /boot/vmlinuz-2.4.21-9.30AXsmp ro root=LABEL=/1 console=ttyS0 console=tty1
步驟 3:調整 klogd 級別
編輯 /etc/sysconfig/syslog:
KLOGD_OPTIONS="-x -c 7"
步驟 4:客戶端驗證與記錄
cat /dev/ttyS0 → 應見 hi(伺服器 echo hi > /dev/ttyS0)echo w > /proc/sysrq-trigger(導出堆疊)、modprobe loop(導出模組載入日誌)cat /dev/ttyS0 | tee /tmp/result 持久化記錄/tmp/result 即保留完整核心日誌| 類別 | 典型原因 | 對策方向 |
|---|---|---|
| 系統硬體 | SCSI/HBA/RAID/網卡/硬碟/主機板故障 | 壓測、更換、固件升級 |
| 外圍硬體 | 網路設備、外接存儲 | 隔離測試、替換 |
| 軟體應用 | 記憶體洩漏、死鎖、無限迴圈 | 程式碼審查、升級補丁 |
| 驅動程式 | 驅動 Bug、版本不匹配 | 升級/降級驅動、廠商支援 |
| 核心 Bug | 排程器、記憶體管理、VFS 等子系統缺陷 | 查閱 LKML、升級/回滾核心 |
| 系統配置 | 參數錯誤、防火牆/SELinux 衝突 | 恢復預設、最小化配置驗證 |
/etc/yum.conf installonly_limit)死機不可怕,可怕的是無證據、無章法。建立「硬體基線→核心可觀測→配置最小化」三重防線,將死機從「懸案」轉化為「可解案件」。