程序出錯產生core,core作為我們問題排查的依據,否則我們根本不知道發生了什么。所以產生core文件至關重要。
不產生core文件的原因排查 :
通常情況下,只要設置了ulimit -c unlimited,在程序崩潰后就會在當前目錄下生成core文件
1.進程是設置 用戶 id,當前用戶並非程序文件的所有者
2.進程是設置 組 id,當前用戶並非該程序文件的組所有者
1、2可以通過設置/proc/sys/kernel/suid_dumpable來改變,這樣suid的也可以產生core文件
3.用戶沒有寫當前工作目錄的許可證
4.文件太大。core文件的許可證通常的用戶讀/寫,組讀和其他讀。
系統core文件問題具體排查和相關設置
1. ulimit -a ,查看

core file size 如果是0,則表示沒有打開core dump,我這里設置為不限制表示已經打開。
2. ulimit -c [kb] 設置core文件大小
ulimit -c 0 關閉core dump 開關
ulimit -c 100 core文件最大為100k
ulimit -c unlimited 不限制core文件大小
3.指定內核轉存的文件名和目錄
1)core文件自動加上進程號
echo 1 > /proc/sys/kernel/core_uses_pid
2)修改kernel參數,指定內核轉存所產生的core文件的路徑和文件名
可以通過在/etc/sysctl.conf文件中,對sysctl設置kernel.core_pattern的設置。
kernel.core_pattern = /var/core/core_%e_%p
kernel.core_uses_pid = 0
sysctl –p /etc/sysctl.conf
注:如果/proc/sys/kernel/core_uses_pid 這個文件的內容被配置成1,即使core_pattern中沒有設置%p,最后生成的core dump文件名仍會加上進程ID。
這里%e, %p分別表示:
%c 轉儲文件的大小上限
%e 所dump的文件名
%g 所dump的進程的實際組ID
%h 主機名
%p 所dump的進程PID
%s 導致本次coredump的信號
%t 轉儲時刻(由1970年1月1日起計的秒數)
%u 所dump進程的實際用戶ID