Linux 下的Debug - 内核转储(core dump)

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。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淡定的茶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值