Linux環境下進程發生異常而掛掉,通常很難查找原因,但是一般Linux內核給我們提供的核心文件,記錄了進程在崩潰時候的信息。但是生成core文件需要設置開關,具體步驟如下:
1、查看生成core文件的開關是否開啓,輸入命令# ulimit -a
我們看到,第一行core文件大小爲0,沒有開啓。
2、使用#ulimit -c [kbytes]可以設置系統允許生成的core文件大小;
ulimit -c 0 不產生core文件
ulimit -c 100 設置core文件最大爲100k
ulimit -c unlimited 不限制core文件大小
執行命令# ulimit -c unlimited,然後ulimit -a查看core
這樣進程崩潰就可以生成core文件了,這種方法只能在shell中生效,下面說一下永久生效的方法:
#vim /etc/profile,然後進入編輯模式,在profile文件中加入
ulimit -c unlimited
保存退出,重啓服務器,改文件就長久生效,或者#source /etc/profile,不重啓服務器,使用source使文件馬上生效。
3.指定生成文件的路徑和名字;執行# vim /etc/sysctl.conf,進入編輯模式,加入下面兩行
kernel.core_pattern=/tmp/corefile/core_%e_%p
kernel.core_uses_pid=0
在var下創建core目錄,用# sysctl –p /etc/sysctl.conf,是修改馬上生效。
core_pattern的命名參數如下:
%c 轉儲文件的大小上限
%e 所dump的文件名
%g 所dump的進程的實際組ID
%h 主機名
%p 所dump的進程PID
%s 導致本次coredump的信號
%t 轉儲時刻(由1970年1月1日起計的秒數)
%u 所dump進程的實際用戶ID
4、# kill -s SIGSEGV $$ ,執行命令,可以看到/tmp/corefile下生成了一個core文件,說明已經設置成功。
現在可以對進程出問題用gdb對core文件調試了,分析問題。