linux中core dump開啟使用教程【轉】


轉自:http://www.111cn.net/sys/linux/67291.htm

一、什么是coredump

我們經常聽到大家說到程序core掉了,需要定位解決,這里說的大部分是指對應程序由於各種異常或者bug導致在運行過程中異常退出或者中止,並且在滿足一定條件下(這里為什么說需要滿足一定的條件呢?下面會分析)會產生一個叫做core的文件。

通常情況下,core文件會包含了程序運行時的內存,寄存器狀態,堆棧指針,內存管理信息還有各種函數調用堆棧信息等,我們可以理解為是程序工作當前狀態存儲生成第一個文件,許多的程序出錯的時候都會產生一個core文件,通過工具分析這個文件,我們可以定位到程序異常退出的時候對應的堆棧調用等信息,找出問題所在並進行及時解決。

二、cored dump開啟

執行ulimit –c 檢查是否開啟core dump,若結果為0,則認為沒有啟用core dump文件的生成,需要打開core dump 。開啟core dump的方法有三種,一種是臨時啟用,兩種是永久啟用。

臨時啟用

方法1(ulimit命令法)

執行如下命令:

ulimit -c 1024

ulimit -c unlimited
上例中,前一種是限制core dump的文件大小不超過1024K,后一種是不限制core dump文件的大小,現在的程序占用內存都比較凶猛,以前寫C程序需要計算內存的時代已經過去了。如果不加限制,可能一個core文件,幾個G就出去了。所以最好還是限制該在小。

永久啟用的兩個方法:

方法二(profile文件修改法)

打開/etc/profile文件,增加如下以下並生使其生效:

ulimit -S -c unlimited > /dev/null 2>&1
注:如果該文件有ulimit -S -c 0 > /dev/null 2>&1 一行,需要先將該行注釋掉。設置完成后通過執行 source /etc/profile 生效。

方法三(修改/etc/security/limits.conf文件)

找到【* soft core 0】行,將其修改為如下內容:

這個方法可以針對指定用戶或用戶組打開core dump,如設置成【* soft core 10485760】,即core dump文件大小是10G 。

需要注意的是此處的設置和方法二中的設置是沖突的,在其中一處設置即可,此處建議用第三種方法設置,因為其可以針對不同的用戶和組進行設置,更加靈活。

注:上面三種方法設置都不需重啟機器,需要做的是退出終端並重新連接,重啟需要core dump的程序即可。

三、修改core dump文件格式

定制core的路徑,名稱格式,通過修改下面兩個配置:

再說下第一句配置,/proc/sys/kernel/core_uses_pid 如果這個文件的內容被配置成1,那么即使core_pattern中沒有設置%p,最后生成的core dump文件名仍會加上進程ID。

需要注意的是,由於/proc下的配置是即時生效的,reboot后,之前的配置就會失效。所以可以增加如下配置到/etc/sysctl.conf文件中,如下:

保存后,執行sysctl -p生效。

注:需要注意的是,上面配置的corefiles該目錄必須有寫權限,否則無法生成core dump文件,可以通過下面的命令創建:

 代碼如下  
 
1 user soft core 1024
或@group soft core 1024
 代碼如下  
 
1 echo 1 >/proc/sys/kernel/core_uses_pid
echo '/corefiles/core-%e-%p-%t' > /proc/sys/kernel/core_pattern
這里先說下后一參數的配置說明:
2 %% 單個%字符
%p 所dump進程的進程ID
%u 所dump進程的實際用戶ID
%g 所dump進程的實際組ID
%s 導致本次core dump的信號
%t core dump的時間 (由1970年1月1日計起的秒數)
%h 主機名
%e 程序文件名
 代碼如下  
 
1 kernel.core_uses_pid = 1
kernel.core_pattern = /corefiles/core-%e-%p-%t
 代碼如下  
 
1 # mkdir /corefiles
# chmod 777 /corefiles


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM