Blog Detail

  • linux core文件不生成原因及相关设置

    程序出错产生core,core作为我们问题排查的依据,否则我们根本不知道发生了什么。所以产生core文件至关重要。

    不产生core文件的原因排查 :

    通常情况下,只要设置了ulimit -c unlimited,在程序崩溃后就会在当前目录下生成core文件

    1.进程是设置 用户 id,当前用户并非程序文件的所有者

    2.进程是设置 组 id,当前用户并非该程序文件的组所有者

    1、2可以通过设置/proc/sys/kernel/suid_dumpable来改变,这样suid的也可以产生core文件

    3.用户没有写当前工作目录的许可证

    4.文件太大。core文件的许可证通常的用户读/写,组读和其他读。

    系统core文件问题具体排查和相关设置

    1. ulimit -a ,查看

    core file size 如果是0,则表示没有打开core dump,我这里设置为不限制表示已经打开。

    2. ulimit -c [kb] 设置core文件大小

    ulimit -c 0 关闭core dump 开关

    ulimit -c 100 core文件最大为100k

    ulimit -c unlimited 不限制core文件大小

    3.指定内核转存的文件名和目录

    1)core文件自动加上进程号

    echo 1 > /proc/sys/kernel/core_uses_pid

    2)修改kernel参数,指定内核转存所产生的core文件的路径和文件名

    可以通过在/etc/sysctl.conf文件中,对sysctl设置kernel.core_pattern的设置。

    kernel.core_pattern = /var/core/core_%e_%p

    kernel.core_uses_pid = 0

    sysctl –p /etc/sysctl.conf

    注:如果/proc/sys/kernel/core_uses_pid 这个文件的内容被配置成1,即使core_pattern中没有设置%p,最后生成的core dump文件名仍会加上进程ID。

    这里%e, %p分别表示:

    %c 转储文件的大小上限

    %e 所dump的文件名

    %g 所dump的进程的实际组ID

    %h 主机名

    %p 所dump的进程PID

    %s 导致本次coredump的信号

    %t 转储时刻(由1970年1月1日起计的秒数)

    %u 所dump进程的实际用户ID