Core dump

ulimit -c unlimited

ulimit -c 

output: unlimited

vi the httpd.conf,

add "CoreDumpDirectory current _user_home",defaultly the corefile will dump to "/",this directory owner is root.

vi nginx.conf

add "working_directory directory;"

restart the httpd.

access the  url which leads process exit.

gdb httpd_path --core=corefile

info threads

search the kill() or threads of top n.

thr x 

bt


    使用 C/C++ 语言开发程序时,当程序 crash 时产生的 core dump 文件对于调试程序是很有帮助的。

    在 Redhat Linux 系统中默认是不生成 core dump 文件的,这是因为在 /etc/profile 文件中有这样一行

        ulimit -S -c 0 > /dev/null 2>&1

    Ubuntu 的 /etc/profile 文件中没有该设置,但 ulimit 同样默认为 0。

    如何打开 core dump 呢?最简单的方法是用户在自己的 ~/.bash_profile 中加入

        ulimit -S -c unlimited > /dev/null 2>&1

    这样设置后允许当前用户生成没有大小限制的 core dump 文件。

    此外还有两种系统级修改生成 core dump 的方法。第一种方法是修改 /etc/profile,把 ulimit 那一行改为

        ulimit -S -c unlimited > /dev/null 2>&1

    这样设置后系统允许所有用户生成没有大小限制的 core dump 文件。这样做的优点是不需要重起系统,缺点是无法控制只让某些用户生成 core dump 文件。第二种方法是修改 /etc/security/limits.conf 文件。很多系统上限都可以通过修改这个文件改变,如最大子进程个数,最大打开文件数等等。这个文件有详细的注释,对如何修改这个文件做了说明。如果想对所有用户打开 core dump,可以加入一行

        * soft core 0

    如果只想对某些用户或用户组打开 core dump,可以加入

        user soft core 0

    或

        @group soft core 0

    注意如果通过修改 /etc/security/limits.conf 文件打开 core dump,还需要注释掉 /etc/profile 中的 ulmit 那一行

        #ulimit -S -c 0 > /dev/null 2>&1

    这样修改的优点是可以针对特定用户或特定组打开 core dump 文件,缺点是需要重起系统。
    最后说一下生成 core dump 文件的位置,默认位置与可执行程序在同一目录下,文件名是 core.***,其中 *** 是一个数字。core dump 文件名的模式保存在 /proc/sys/kernel/core_pattern 中,缺省值是 core。通过以下命令可以更改 core dump 文件的位置(如希望生成到 /tmp/cores 目录下)
        echo "/tmp/cores/core" > /proc/sys/kernel/core_pattern 

当系统中的一些程序在遇到一些错误以及crash时,系统会自动产生core file记录crash时刻系统信息包括内存和寄存器信息,用以程序员日后debug时可以使用。这些错误包括断错误,非法指令,总线错误和用户自己生成的退出信号等等。一般的,core file会在当前文件夹中存放。
         core file有时可能在你发生错误时,并没有出现在你的当前文件夹中,发生这种情况的原因有两个,一个是当前终端被设置为不能弹出core file;另一种则是core file被制定了路径。
         对于前者,我们可以使用ulimit这条命令对core file文件的大小进行设定。一般默认情况下,core file的大小被设置为了0,这样系统就不dump出core file了。这时用如下命令进行设置:
ulimit -c unlimited
这样便把core file的大小设置为了无限大,同时也可以使用数字来替代unlimited,对core file的上限值做更精确的设定。
         除了可以设置core file的大小之外,还可以对core file的名称进行一些规定。这种设置是对/proc/sys/kernel/core_pattern和/proc/sys/kernel/core_uses_pid这两个文件进行修改。改动这两个文件的方法是:
echo <pattern> > /proc/sys/kernel/core_pattern
echo <"0"/"1"> > /proc/sys/kernel/core_uses_pid
并且注意,只有超级用户可以修改这两个文件。
         core_pattern接受的是core file名称的pattern,它包含任何字符串,并且用%作为转移符号生成一些标识符,为core file名称加入特殊含义。已定义的标识符有如下这些:
%%: 相当于%
%p: 相当于<pid>
%u: 相当于<uid>
%g: 相当于<gid>
%s: 相当于导致dump的信号的数字
%t: 相当于dump的时间
%h: 相当于hostname
%e: 相当于执行文件的名称
除了这些标识符之外,还规定:
1.末尾的单个%可以直接去除。
2.%加上除上述之外的任何字符,%和该字符都被去除。
3.所有其他字符都作为一般字符加入名称中。
4.core file的名称最大值为64字节(包括\0)。
5.core_pattern中的默认pattern为core。
6.为了保持兼容性,通过设置core_uses_pid,可以在core file名称的末尾加上%p。
7.pattern中可以包含路径信息。



程序运行时,2 种方法生成 core 文件:

1. gcore [-o filename] pid  该命令不影响程序的运行

2. 通过另外一个进程发送 SIGABRT 信号给当前进程,但该方法会终止当前进程的运行

    sudo kill -s SIGABRT pid

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值