ubuntu 官方連線:
kdump是乙個linux核心崩潰轉儲機制,這個機制的原理是在記憶體中保留一塊區域,這塊區域用來存放capture kernel,當前的核心發生crash後,通過kexec把保留區域的capture kernel執行起來,由capture kernel負責把crash kernel的完整資訊--包括cpu暫存器、堆疊資料等--轉儲到檔案中,檔案的存放位置可以是本地磁碟,也可以是網路。
在ubuntu下實現kdump只需要安裝linux-crashdump這個包就可以了,可以在新立得下搜尋linux-crashdump或者用命令:
sudo apt-get install linux-crashdumplinux-crashdump實際上安裝了三個工具,分別是:crash,kexec-tools,以及makedumpfile。
安裝完畢以後,我們檢查一下grub2的啟動選項,會發現在引導核心的命令linux後面多了乙個引數:
crashkernel=384m-2g:64m,2g-:128mcrashkernel用來指定保留記憶體的大小,語法定義如下:
crashkernel=:[,:,...][@offset]其中,start包含在指定範圍內,而end不包含在指定範圍內。range=start-[end]
參考這個語法定義,我們就可以知道linux-crashkernel幫我們設定的保留區域的大小是:如果記憶體小於384m,不保留記憶體;如果記憶體大於等於384m但小於2g,保留64m;如果記憶體大於2g,保留128m。
在/etc/init.d中還會有乙個kdump的service指令碼,我們可以開啟這個指令碼看一看,內容很簡單,主要是用kexec把/boot下的linux核心映象當作capture kernel放入保留記憶體裡。
在下面的例項中,所有的操作都需要root許可權,所以請先用sudo su切換到root。
我們需要首先啟動kdump service,命令如下:
service kdump start下面是啟動成功的畫面:
寫乙個讓核心崩潰的模組還是比較麻煩的,我們可以通過sysrq來實現這個目的。注意,在進行下面的操作前,請儲存好自己的資料。
echo c > /proc/sysrq-trigger或者按這個組合按鍵: alt+sysrq+c
通過上面的操作,你的系統會立刻崩潰。不出意外的話,系統很快就會重啟,然後在/var/crash這個目錄下我們就可以找到轉儲的crash映象。
到這裡,利用kdump進行linux核心轉儲的實驗就結束了,比起kdump tutorial裡的步驟簡單很多,這都是ubuntu的功勞。
我們把crash壓縮包解到~/tmp中:
安裝好dbgsym之後,我們就可以使用crash來分析vmcore了,命令如下:
crash /usr/lib/debug/boot/vmlinux-2.6.32-25-generic ~/tmp/vmcore在crash裡,我們可以用bt檢視核心崩潰時的call trace:
詳細的crash用法大家可以參考crash tutorial,或者用google搜尋一下相關資料。
注:1. 本文採用的作業系統環境是 kubuntu 10.04,在ubuntu 10.04下實驗應該同樣是沒有問題的。
2. 我有用過ubuntu 10.10來實驗kdump,但是很不幸,capture kernel沒有跑起來,如果大家有在ubuntu 10.10下的成功經驗,麻煩告訴我。
ubuntu下報core dump核心轉儲的錯誤
記錄 學習 在此感謝原鏈結博主!core dump又叫核心轉儲,當程式執行過程中發生異常,程式異常退出時,由作業系統把程式當前的記憶體狀況儲存在乙個core檔案中,叫core dump.linux中如果記憶體越界會收到sigse 訊號,然後就會core dump 在程式執行的過程中,有的時候我們會遇...
核心檔案 核心轉儲
核心檔案 核心檔案 core file 也稱核心轉儲 core dump 是作業系統 在程序收到某些訊號 而終止執行時,將此時程序位址空間的內容以及有關程序狀態的其他資訊寫出的乙個磁碟檔案。這種資訊往往用於除錯。核心檔案一詞 於磁芯記憶體 core memory 核心轉儲 通常這個詞的含義是乙個動作...
獲取程序的核心轉儲
使用命令ulimit可以檢視核心轉儲功能是否開啟 ulimit c 0 c選項表示核心轉儲檔案的大小限制。0表示核心轉儲無效。可以使用下面的命令開啟 ulimit c unlimited 再次檢視 ulimit c unlimited 執行測試程式 test ulimit 段錯誤 核心已轉儲 fil...