萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 電腦故障排除 >  >> 電腦常見故障 >> 電腦當機

Linux 系統死機怎麼辦?Core Dump、Diskdump、Netdump 三大核心轉儲機制深度解析

Linux 伺服器或嵌入式裝置發生核心恐慌或程式崩潰時,獲取事發當下的記憶體映像是根因分析的關鍵。Linux 提供三種主流核心轉儲機制:Core Dump(使用者空間)、Diskdump(本地核心轉儲)、Netdump(網路核心轉儲)。本文將詳細說明三者的配置流程、適用場景與操作指令,助運維工程師快速建立故障復盤能力。

一、 Core Dump:使用者空間程式崩潰的「黑盒子」

適用於:應用程式 Segfault、Abort 等異常終止。核心將進程虛擬記憶體寫入檔案,供 GDB 分析呼叫堆疊、變數值。

啟用與配置步驟

  1. 解除大小限制:編輯 /etc/profile 或 /etc/security/limits.conf,設定 ulimit -c unlimited(預設為 0 關閉)。
  2. 指定核心檔案命名與路徑:
    sysctl -w "kernel.core_pattern=/coredump/%e-%p-%t.core"
    mkdir -p /coredump
    chmod 1777 /coredump   # 防止普通使用者刪除他人 core 檔
    sysctl -p

    參數說明:%e 程式名、%p PID、%t 時間戳,避免檔名衝突。

  3. 驗證測試:編譯一個故意觸發 SIGSEGV 的測試程式執行,確認 /coredump 產生對應 .core 檔,並以 gdb ./program /coredump/xxx.core 分析。

二、 Diskdump:單機本地核心轉儲,無需網路

適用於:獨立伺服器、無管理網路環境、核心恐慌時自動保存 vmcore 至保留分區。

配置流程(以 HP Smart Array cciss 控制器為例)

  1. 載入模組:modprobe diskdump
  2. 指定保留分區:編輯 /etc/sysconfig/diskdump,設定 DEVICE=/dev/cciss/c0d0p2(需為空白分區,資料將清空)。
  3. 初始化分區:service diskdump initialformat(警告:分區資料全失)。
  4. 替換儲存控制器模組(僅 HP cciss 需要):
    # /etc/modprobe.conf
    alias scsi_hostadapter cciss_dump
    options cciss_dump dump_drive=0   # 對應 c0d[0]
  5. 重建 initramfs:
    mv /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.old
    mkinitrd /boot/initrd-$(uname -r).img $(uname -r)
  6. 啟用服務:chkconfig diskdump on && service diskdump start
  7. 崩潰後自動處理:重啟時 init 腳本自動將保留分區內容讀出至 /var/crash/127.0.0.1-/vmcore,供 crash 工具分析。

三、 Netdump:跨網路傳送 vmcore 至收集伺服器

適用於:叢集環境、無本地儲存空間、需集中管理多節點核心轉儲。需一台 Netdump Server 與多台 Client。

Server 端配置

  1. 安裝套件:rpm -ivh netdump-server-*.rpm
  2. 設定帳號密碼:passwd netdump
  3. 啟用服務:chkconfig netdump-server on && service netdump-server start
  4. 預設接收目錄:/var/crash//

Client 端配置

  1. 安裝套件:rpm -ivh netdump-*.rpm
  2. 編輯 /etc/sysconfig/netdump:
    DEV=eth0
    NETDUMPADDR=172.16.81.182   # Server IP
    NETDUMPMACADDR=00:0C:29:79:F4:E0  # Server MAC(可用 arp 取得)
  3. 傳播金鑰:service netdump propagate(依提示輸入 netdump 密碼)。
  4. 啟用服務:chkconfig netdump on && service netdump start

功能驗證(會觸發核心恐慌,請在測試機執行)

cp /usr/share/doc/netdump-*/crash.c .
gcc -DKERNEL -DMODULE -I/lib/modules/$(uname -r)/build/include -c crash.c
insmod ./crash.ko   # 系統即刻崩潰,Server 端將收到 vmcore

傳輸期間 Server 目錄會出現 vmcore-incomplete,完成後自動更名為 vmcore,大小約等於實體記憶體容量(512MB 記憶體約產生 510MB vmcore)。

四、 選型建議與最佳實踐

機制適用場景優點缺點/注意
Core Dump應用程式除錯、開發測試輕量、無需額外硬體、支援 GDB 完整分析無法捕捉核心恐慌、需足夠磁碟空間
Diskdump單機生產伺服器、無管理網路獨立運作、捕捉核心恐慌、無網路依賴需預留專用分區、HP cciss 需替換模組、重啟才能取得 vmcore
Netdump叢集/雲端節點、集中化管理即時傳輸、集中存儲、支援大量客戶端需專用管理網路、Server 需大儲存空間、配置相對複雜

五、 事後分析工具鏈

  • crash:官方核心分析工具,語法類 GDB,可檢視任務結構、記憶體佈局、鎖狀態、呼叫堆疊。
  • kgdb / kdb:核心級除錯器,支援斷點、單步執行,需串口或 KGDBOC 協助。
  • drgn:Python 可程式化核心檢查工具,適合自動化分析腳本編寫。

建立完善的核心轉儲機制,是 Linux 系統高可用性的基石。建議生產環境至少啟用 Diskdump 或 Netdump,並定期演練 vmcore 分析流程,將故障復盤時間從「天」壓縮至「小時」級。

copyright © 萬盛學電腦網 all rights reserved