Linux 系統發生當機時,往往讓管理員感到無從下手:系統日誌沒有記錄任何崩潰前後的資訊,似乎無法分析故障原因。但實際上,Linux 提供了多種機制,能在系統崩潰後捕獲有價值的診斷資料,幫助判斷是硬體故障還是應用程式 Bug 導致的問題。本文將系統介紹三種核心的崩潰資訊獲取方法:Core Dump、Diskdump 與 Netdump,並提供詳細的配置步驟與實操指令。
Core Dump 主要用於偵錯應用程式錯誤。當應用程式異常終止時,開啟 Core Dump 功能可生成一個包含程式崩潰時記憶體狀態的核心轉儲檔案,供事後分析。
/etc/profile,加入或修改:ulimit -c unlimitedsysctl -w "kernel.core_pattern=/coredump/%e.core"/coredump 目錄下,檔名為「程式名稱.core」。配置完成後,當應用程式崩潰時,系統會自動在指定目錄生成核心檔案,可使用 gdb 等工具進行分析。
Diskdump 工具能在單機上建立並收集 vmcore(核心轉儲),無需網路支援。當核心本身崩潰時,當前記憶體、CPU 狀態及相關資訊會被保存到支援 Diskdump 的磁碟保留分區。下次重啟時,初始化腳本會從保留分區讀取資料並建立 vmcore 檔案,存放於 /var/crash/ 目錄,檔名格式為 127.0.0.1-<日期>。
若非 HP SCSI 設備(即裝置名為 /dev/sdX 形式),可跳過第 3、4 步,但需在第一步前先執行 modprobe diskdump。
/etc/sysconfig/diskdumpDEVICE=/dev/cciss/c0d0p2# service diskdump initialformat/etc/modprobe.conf,找到:alias scsi_hostadapter ccissalias scsi_hostadapter cciss_dumpoptions cciss_dump dump_drive=1/dev/cciss/c0d[#a]p[#b],請設定 options cciss_dump dump_drive=[#a]# mv /boot/initrd-`uname -r`.img /boot/initrd-`uname -r`.img.old# mkinitrd /boot/initrd-`uname -r`.img `uname -r`# chkconfig diskdump on適用於不支援 Diskdump 的舊版系統(如紅旗 DC 4.0/3.0)。Netdump 需要至少一台伺服器與任意數量的客戶端。伺服器接收客戶端當機時的資訊,客戶端為頻繁當機的機器。
rpm -q netdump-serverRedFlag/RPMS/ 目錄安裝:rpm -ivh netdump-server-x.x.x.rpmpasswd netdumpchkconfig netdump-server onservice netdump-server startrpm -q netdumpnetdump-x.x.x.rpm。/etc/sysconfig/netdumpDEV=eth0NETDUMPADDR=172.16.81.182 (Netdump 伺服器 IP)NETDUMPMACADDR=00:0C:29:79:F4:E0 (伺服器 MAC 位址)service netdump propagate (依提示輸入密碼)chkconfig netdump onservice netdump startcp /usr/share/doc/netdump-xxxxxx/crash.c .gcc -DKERNEL -DMODULE -I/lib/modules/$(uname -r)/build/include -c crash.cinsmod ./crash.o/var/crash/<客戶端IP>-<日期>/ 目錄下將生成 vmcore 檔案(轉儲過程中暫名為 vmcore-incomplete,完成後自動重命名)。512MB 記憶體系統測試約產生 510MB 的 vmcore。掌握這三種方法,無論是應用程式異常、核心崩潰,還是無法本地儲存轉儲的環境,都能有效獲取診斷資料,快速定位故障根因。