coredump备忘

背景

程序已经挂死等情况,内核会生成一个core文件(是内存映像以及调试信息)。可以通过使用gdb来查看core文件,指示出导致程序出错的代码所在的文件和行数,一般为了方便调试,需要指定core 文件的大小以及位置等,core 文件其实当前内存的保存信息,所以导致了如果服务器内存很大,也会导致core 文件很大,一般会需要切割大小,不然一会就把硬盘撑满。

  • 查看系统中core文件生成的开关是否打开
    1)使用ulimit -c命令可查看core文件的生成开关,若结果为0,则便是关闭了此功能,不会生成core文件。
  • 设置core文件生成
    使用命令ulimit -c filesize命令
    若ulimit -c unlimited 则标识此core文件的大小不受限制
    若指定filesize,如果生成的信息超过此大小,将会被裁剪,最终生成一个不完整的core文件,在调试此core文件时,gdb会提示错误。
    但是若想整个系统中生效则在shell里面设置是不行的,方法如下:
    编辑/root/.bash_profile文件,在其中加入ulitmit -S -c unlimited
source /root/.bash_profile
  • core文件的设置
    /proc/sys/kernel/core_uses_pid可以控制core文件的问价名是否添加PID作为扩展,文件的内容为1,标识添加PID作为扩展,生成的core文件格式为core.XXXX;为0则表示生成的core文件统一命名为core;可通过一下命令修改此文件:
echo "1" > /proc/sys/kernel/core_uses_pid

core文件的保存位置和文件名格式

echo "/corefile/core-%e-%p-%t" > /proc/sys/kernel/core_pattern #可以将core文件统一生成到/corefile目录下,产生的文件名为core-命令名-pid-时间戳

以下是参数列表:

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名

你可能感兴趣的:(coredump备忘)