轉自: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文件,可以通過下面的命令創建:
代碼如下 | |||||
|
|||||
代碼如下 | |||||
|
|||||
代碼如下 | |||||
|
|||||
代碼如下 | |||||
|