Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Linux 系統死機/崩潰診斷實戰指南:從 Magic SysRq 到串口控制台與核心崩潰轉儲

編輯:Linux 教學

前言

Linux 系統「死機」 (Kernel Panic / Hard Lockup / Soft Lockup) 診斷是系統工程師核心能力。本文系統梳理從現場保護、Magic SysRq 熱鍵、串口控制台遠程捕獲、核心崩潰轉儲 到硬體/驅動排查的完整方法論。

一、現場保護原則

  1. 能復現 = 80% 解決:建立穩定復現步驟,問題本質已暴露。
  2. 核心問題可復現 = 99% 解決:配合 kgdb/kprobes 即可定位到函數/指令級。
  3. 不可復現:依賴死機瞬間殘留資訊 (日誌、串口輸出、崩潰轉儲)。

二、鍵盤尚存活:Magic SysRq 組合鍵急救

前置啟用 (需寫入啟動腳本永久生效)

# /etc/rc.local 或 systemd 服務
echo 1 > /proc/sys/kernel/sysrq          # 啟用 SysRq
setterm -blank 0                         # 關閉終端自動熄屏,保留螢幕輸出

常用組合鍵 (按住 Alt+SysRq 再按字母)

組合鍵功能輸出位置
Alt+SysRq+T顯示所有任務堆疊追蹤 (Task Stack Trace)主控台 / dmesg
Alt+SysRq+M顯示記憶體分配資訊主控台 / dmesg
Alt+SysRq+W顯示阻塞任務 (Blocked Tasks)主控台 / dmesg
Alt+SysRq+P顯示當前 CPU 寄存器狀態主控台 / dmesg
Alt+SysRq+S緊急同步磁碟-
Alt+SysRq+U重新掛載所有檔案系統為唯讀-
Alt+SysRq+B強制重啟 (不同步、不卸載)-

經典安全重啟序列:Alt+SysRq+R (鍵盤原始模式) → E (SIGTERM) → I (SIGKILL) → S (Sync) → U (Remount RO) → B (Reboot)。

三、鍵盤也死機:串口控制台捕獲核心輸出

硬體準備

  • 目標伺服器 (被監測端) — 需實體串口 (COM1/ttyS0) 或 USB轉串口。
  • 監控電腦 (筆電/另一台伺服器) — 終端軟體。
  • 一條 串口交叉線 (Null Modem Cable) 或 USB轉串口傳輸線。

目標端配置

  1. GRUB 核心參數:編輯 /boot/grub/menu.lst (GRUB Legacy) 或 /etc/default/grub (GRUB2)
    kernel /boot/vmlinuz-... ro root=LABEL=/ console=ttyS0,115200 console=tty0
    雙控制台:ttyS0 為串口 (115200 8N1),tty0 為本地螢幕。
  2. klogd 參數:編輯 /etc/sysconfig/syslog (或 /etc/rsyslog.conf)
    KLOGD_OPTIONS="-x -c 7" — 級別 7 (Debug) 將所有核心訊息輸出到串口。
  3. 重啟生效。

監控端驗證與捕獲

# 1. 連線測試
# 監控端: cat /dev/ttyUSB0  (或 ttyS0)
# 目標端: echo "test" > /dev/ttyS0
# 應在監控端看到 test

# 2. SysRq 觸發測試
# 目標端: echo w > /proc/sysrq-trigger
# 監控端應顯示阻塞任務堆疊

# 3. 模組載入測試
# 目標端: modprobe loop
# 監控端應顯示模組載入訊息

# 4. 正式捕獲 (長期運行)
cat /dev/ttyUSB0 | tee /tmp/kernel_crash.log
# 或使用 Windows 超級終端 / PuTTY Serial 記錄到檔案

四、核心崩潰轉儲 : Kdump / LKCD / Netdump

當系統發生 Kernel Panic,自動保留記憶體映像供事後分析。

Kdump (主流標準,RHEL/CentOS/Fedora/Ubuntu 預支援)

# 1. 安裝
sudo apt-get install kdump-tools linux-crashdump  # Debian/Ubuntu
sudo yum install kexec-tools crash                # RHEL/CentOS

# 2. 配置保留記憶體 (GRUB 參數)
crashkernel=384M-:128M   # 系統記憶體 >384M 保留 128M 給 crash kernel

# 3. 啟用服務
sudo systemctl enable kdump-tools
sudo systemctl start kdump-tools

# 4. 測試觸發 (謹慎! 會重啟)
echo c > /proc/sysrq-trigger

# 5. 崩潰轉儲位置
/var/crash/YYYY-MM-DD-HH:MM/vmcore  # 配合 crash 工具分析

Netdump (網路傳輸 vmcore 到遠端伺服器)

  • 適用無本地磁碟空間/需集中分析場景。
  • 需配置專用網卡/管理網路避免業務干擾。

五、事後分析工具鏈

# 1. crash 工具 (GDB 前端)
crash /usr/lib/debug/boot/vmlinux-$(uname -r) /var/crash/.../vmcore
# 內部指令: bt (backtrace), ps, kmem, files, irq, timer ...

# 2. ksymoops (舊版 oops 解碼)
ksymoops -k /boot/System.map -l /proc/modules < oops.log

# 3. dmesg / journalctl -k (未崩潰只留下訊息)
journalctl -k -b -1  # 上一次啟動的核心日誌

六、常見死機根因分類排查

類別典型徵兆排查方向
硬體故障隨機死機、記憶體錯誤 (MCE)、磁碟 I/O 錯誤Memtest86+、SMART 磁碟檢測、IPMI 硬體日誌、更換記憶體/主機板/電源
驅動 Bug特定操作觸發 (如啟動 3D、高網路負載)、可升級驅動後消失升級/降級驅動、檢查廠商勘誤表、啟用動態除錯 dyndbg
核心 Bug特定核心版本出現、LKML 有相似報告升級穩定分支核心、套用回溯補丁、報告上游
軟體/配置資源耗盡 (OOM Killer)、檔案系統錯誤、NTP 時間跳躍調整 vm.overcommit_memory、檢查 dmesg | grep -i oom、檢查 cron/定時任務
外部環境KVM 切換器、PDU 電源波動、網路風暴排除法:最小化外設、獨立供電、旁路網路設備

七、Google 搜尋技巧 (拋磚引玉)

# 關鍵字組合
"Kernel panic" "your_motherboard_model" "kernel_version"
"Hard lockup" "driver_name" "dmesg_output_snippet"
"NMI watchdog" "CPU# stuck for" "your_workload"

即使無直接答案,也能確認是否為已知問題、縮小排查範圍。

結語

Linux 死機診斷是「科學與藝術的結合」:Magic SysRq 爭取現場堆疊、串口控制台 突破鍵盤失效封鎖、Kdump 保留完整記憶體現場、crash 工具 深入核心數據結構。配合系統性的硬體/驅動/核心/軟體分層排查,將不可復現的幽靈問題轉化為可定位、可修復的工程任務。持續閱讀 Documentation/sysrq.txt、kernel.org/doc/html/latest/admin-guide/kdump/kdump.html,實戰演練,方能臨危不亂。

Copyright © Windows教程網 All Rights Reserved