Linux Core 文件在系統排障中的應用

1. 什麼是Core dump 文件?

Core Dump 又叫核心轉儲。在程序運行過程中發生異常時,將其內存數據保存到文件中,這個過程叫做 Core Dump。

在開發過程中,難免會遇到程序運行過程中異常退出的情況,這時候想要定位哪裏出了問題,僅僅依靠程序自身的信息打印(日誌記錄)往往是不夠的,這個時候就需要 Core Dump 文件來幫忙了。

一個完整的 Core Dump 文件實際上相當於恢復了異常現場,利用 Core Dump 文件,可以查看到程序異常時的所有信息,變量值、棧信息、內存數據,程序異常時的運行位置(甚至記錄代碼行號)等等,定位所需要的一切信息都可以從 Core Dump文件獲取到,能夠非常有效的提高定位效率。

2. 如何查看Core文件?

Core文件默認是不開啓的,運行 ulimit -c 命令,如果返回的結果爲0,說明Core文件的指定大小爲0,即沒有開啓Core文件。可以通過設置

ulimit -c filesize 指定Core生成文件的大小,單位爲KBytes. 也可以設置 ulimit -c ulimited 不限制Core文件的大小。

3.2 Core Dump 文件名設置

Core Dump 文件默認的名字爲core,而且新的Core文件會把老的覆蓋,這樣我們只能看到最後一次的 Core Dump 信息,可以通過設置Core文件名稱模板,使每次生成的 Core Dump 文件區分開來。

Core Dump 文件的命名規則定義在/proc/sys/kernel/core_pattern文件中,規則中還可以加入預設的變量來更好的區分Core文件,支持的變量列表如下:

變量 說明
%% %字符
%p 進程ID(PID)
%u 用戶ID(UID)
%g 用戶組ID
%s 觸發 Core Dump 的信號
%t 觸發 Core Dump 的時間(單位爲秒,從 1970-01-01 00:00:00 開始計算)
%h 主機名稱(主機名可以通過uname命令來查看)
%e 程序名稱(無路徑信息)
%E 程序的路徑名稱(路徑中的/會被!替代)
%c Core文件的限制大小值(Linux 2.6.24版本後開始支持)

注:Core Dump 文件名的最大長度爲128字節(在 Linux 2.6.19 版本前,最大長度爲64字節)。

例如:可以通過下面的命令,生成文件名爲core-程序名稱-進程ID-時間的 Core Dump 文件:

echo "core-%e-%p-%t" > /proc/sys/kernel/core_pattern

從 Linux 2.4 版本開始,提供了一種比較原始的Core文件名設置方式,直接設置/proc/sys/kernel/core_uses_pid文件中的值爲1,生成的Core文件名中便會自動加上.PID後綴,即生成的文件名爲core.PID這種形式。執行下面的命令可以設置該值:

echo "1" > /proc/sys/kernel/core_uses_pid

4 如何使用 Core Dump

有了 Core Dump 文件後,可以使用GDB來加載分析,執行如下命令(假設可執行程序名稱及路徑爲/home/hutaow/test_dump,生成的Core文件名爲core):

gdb /home/hutaow/test_dump -c core

加載完成後,即可以在GDB中查看程序異常時的各種運行信息了(查看變量值、線程信息、調用棧、反彙編等等)。

文章參考:http://hutaow.com/blog/2013/10/25/linux-core-dump/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章