2021-05-12 14:32:11
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://www.linuxidc.com/Linux/2016-11/137653.htm
相關文章