linux6下kdump的配置
背景知識:
kexec是一個快速啟動機制,允許通過已經運作的核心的上下文啟動一個Linux核心,不需要經過BIOS。BIOS可能會消耗很多時間,特别是帶有衆多數量的外設的大型伺服器。這種辦法可以為經常啟動機器的開發者節省很多時間。
kdump 是一個新的,而且非常可信賴的核心崩潰轉儲機制。崩潰轉儲資料可以從一個新啟動的核心的上下文中擷取,而不是從已經崩潰的核心的上下文。當系統崩潰 時,kdump使用kexec啟動到第二個核心。第二個核心通常叫做捕獲核心(capture kernel),以很小記憶體啟動,并且捕獲轉儲鏡像。
第一個核心保留了記憶體的一部分,第二個核心可以用來啟動。注意,在啟動時,kdump保留了一定數量的重要的記憶體,這改變了紅帽企業Linux 5最小記憶體需求。
常見問題:
(1)如果伺服器經常當機(coredump),但是由苦于沒有輸出資訊可以分析,可以嘗試一下Linux自帶的kdump。kdump會在系統核心崩潰時,啟動第二個核心來記錄目前記憶體資訊。
(2)kdump經常是在系統安裝過程中進行設定的,但如果是作業系統安裝完成後,kdump的值需要更改。這種情況重裝作業系統是很浪費時間的。
解決方法:
方法一:
安裝kexec-tools
通過指令rpm -q kexec-tools檢視該工具是否安裝,沒有則安裝(yum install kexec-tools*)
配置kdump使用的記憶體大小
title Red Hat Enterprise Linux Server (2.6.18-128.el5)
root (hd0,2)
initrd /initrd-2.6.18-128.el5.img
修改之後,重新開機系統。128M記憶體(從16M開始)不被正常的系統使用,為捕獲核心保留。注意,free -m的輸出會顯示記憶體比不加參數時少了128M,這就是我們所期望的。
說明:可以使用小于128M,但是隻使用64M做測試被證明是不可靠的。(我設定的是128M)
指定vmcore将被轉儲的路徑
配置/etc/kdump.conf檔案,指定vmcore将被轉儲的路徑。可以通過scp拷貝到另一個伺服器,也可以是裸裝置,或者本地的檔案系統。如下圖帶顔色所示,即為轉儲路徑:
<a href="https://s3.51cto.com/wyfs02/M02/04/B6/wKiom1mkITTSssoFAAALboTS0uE467.png" target="_blank"></a>
配置和啟動服務
# chkconfig kdump on
# service kdump start
說明: 這個時候啟動肯定會失敗的,因為記憶體已經被使用完。重新開機伺服器(reboot)即可,core檔案預設記錄在/var/crash目錄中。
測試
輸入echo "c">/proc/sysrq-trigger,界面會出現一些資訊,類似下面一樣:
<a href="https://s2.51cto.com/wyfs02/M01/A3/67/wKioL1mkJk_Rc07qAAD6KglvP44076.png" target="_blank"></a>
<a href="https://s2.51cto.com/wyfs02/M01/A3/67/wKioL1mkJk_Rc07qAAD6KglvP44076.png" target="_blank">過一會系統就會自動重新開機,這個時候就說明你的kdump已經配置成功了,重新開機之後/var/crash目錄下就可以看到有一個檔案夾,檔案夾的名字是日期,裡面就是你需要的core檔案。</a>
方法二:
通過指令system-config-kdump來配置(如果沒有該指令,可能是相應工具沒有安裝)。 kdump也支援傳輸到另一個伺服器,也可以存儲到裸裝置。
安裝system-config-kdump指令:
yum install setuptool
yum install -y system-config-kdump.noarch
<a href="http://www.lvluo.net/blog/?attachment_id=240" target="_blank"></a>
或者是這樣的:
說明:在界面中先點選reload按鈕,然後再點選“apply”讓配置生效,重新開機系統。
本文轉自品鑒初心51CTO部落格,原文連結:http://blog.51cto.com/wutengfei/1960299,如需轉載請自行聯系原作者