1.sysctl -a|grep core
kernel.core_uses_pid = 1
kernel.core_pattern = core
kernel.core_pipe_limit = 0
2.ulimit -c
1
ulimit -c unlimited
3.modify /etc/sysctl.conf
kernel.core_pattern = %%%p-%u-%g-%s-%t-%h-%e-%c.core
core file is :
%6619-0-0-11-1370293406-linux-4-a.out-18446744073709551615.core
%% 單個%字符
%p 所dump進程的進程ID
%u 所dump進程的實際用戶ID
%g 所dump進程的實際組ID
%s 導致本次core dump的信號
%t core dump的時間 (由1970年1月1日計起的秒數)
%h 主機名
%e 程序文件名
4.kernel.core_uses_pid = 1
core file is :
core.6617
5.core文件太大,影響系統運行,可定位到/usr/tmp目錄下
kernel.core_pattern = /usr/tmp/%%p-%u-%g-%s-%t-%h-%e-%c.core
進一步可以壓縮
kernel.core_pattern= | usr/local/sbin/core_helper %t %e %p %c
kernel.core_uses_pid= 0
$sysctl-p
core_helper:
#!/bin/sh
execgzip ->/var/core/$1-$2-$3-$4.core.gz
在suse下的腳本爲:
exec gzip -c >/var/core/$1-$2-$3-$4.core.gz
管道符在2.6才支持
5. suid權限的程序的轉儲
kernel.suid_dumpable = 0
fs.suid_dumpable = 1
6.利用內核轉儲掩碼排除共享內存
多個進程使用同一個共享內存,共享內存達到幾個G,會生成很大的文件,對磁盤和系統都有影響,轉儲過程中會導致系統咱書停止服務。
設置方法, /proc/<PID>/coredump_filter
bit 0 匿名專用內存
bit1 匿名共享專用內存
bit2 file-backed專用內存
bit3 file-backed共享內存
bit4 ELF文件映射 (2.6.24後可用)
example:
cat /proc/16278/coredump_filter
00000033
echo 1 > coredump_filter
cat coredump_filter
00000001
7.啓用整個系統的轉儲
1)在/etc/initscript中加入
ulimit -S -c 0 >/dev/null 2>&1 //禁用
ulimit -S -c 0 >/dev/null 2>&1 //開啓
/etc/sysconfig/init
DAEMON_COREFILE_LIMIT='ulimited'
2)直接修改/etc/security/limits.conf
3)在/etc/sysctl.conf加入
fs,syud_dumpable=1
使SUID的程序也能生成core。