Linux 伺服器或嵌入式裝置發生核心恐慌或程式崩潰時,獲取事發當下的記憶體映像是根因分析的關鍵。Linux 提供三種主流核心轉儲機制:Core Dump(使用者空間)、Diskdump(本地核心轉儲)、Netdump(網路核心轉儲)。本文將詳細說明三者的配置流程、適用場景與操作指令,助運維工程師快速建立故障復盤能力。
適用於:應用程式 Segfault、Abort 等異常終止。核心將進程虛擬記憶體寫入檔案,供 GDB 分析呼叫堆疊、變數值。
/etc/profile 或 /etc/security/limits.conf,設定 ulimit -c unlimited(預設為 0 關閉)。sysctl -w "kernel.core_pattern=/coredump/%e-%p-%t.core"
mkdir -p /coredump
chmod 1777 /coredump # 防止普通使用者刪除他人 core 檔
sysctl -p
參數說明:%e 程式名、%p PID、%t 時間戳,避免檔名衝突。
SIGSEGV 的測試程式執行,確認 /coredump 產生對應 .core 檔,並以 gdb ./program /coredump/xxx.core 分析。適用於:獨立伺服器、無管理網路環境、核心恐慌時自動保存 vmcore 至保留分區。
modprobe diskdump/etc/sysconfig/diskdump,設定 DEVICE=/dev/cciss/c0d0p2(需為空白分區,資料將清空)。service diskdump initialformat(警告:分區資料全失)。# /etc/modprobe.conf
alias scsi_hostadapter cciss_dump
options cciss_dump dump_drive=0 # 對應 c0d[0]
mv /boot/initrd-$(uname -r).img /boot/initrd-$(uname -r).img.old
mkinitrd /boot/initrd-$(uname -r).img $(uname -r)
chkconfig diskdump on && service diskdump start/var/crash/127.0.0.1-/vmcore ,供 crash 工具分析。適用於:叢集環境、無本地儲存空間、需集中管理多節點核心轉儲。需一台 Netdump Server 與多台 Client。
rpm -ivh netdump-server-*.rpmpasswd netdumpchkconfig netdump-server on && service netdump-server start/var/crash// rpm -ivh netdump-*.rpm/etc/sysconfig/netdump:
DEV=eth0
NETDUMPADDR=172.16.81.182 # Server IP
NETDUMPMACADDR=00:0C:29:79:F4:E0 # Server MAC(可用 arp 取得)
service netdump propagate(依提示輸入 netdump 密碼)。chkconfig netdump on && service netdump startcp /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 需大儲存空間、配置相對複雜 |
建立完善的核心轉儲機制,是 Linux 系統高可用性的基石。建議生產環境至少啟用 Diskdump 或 Netdump,並定期演練 vmcore 分析流程,將故障復盤時間從「天」壓縮至「小時」級。