首頁 > 軟體

Linux Core 檔案在系統排障中的應用

2020-06-16 17:27:04

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


IT145.com E-mail:sddin#qq.com