一什么是 coredump
我们经常听到大家说到程序 core 掉了, 需要定位解决, 这里说的大部分是指对应程序由于各种异常或者 bug 导致在运行过程中异常退出或者中止, 并且在满足一定条件下 (这里为什么说需要满足一定的条件呢? 下面会分析) 会产生一个叫做 core 的文件
通常情况下, core 文件会包含了程序运行时的内存, 寄存器状态, 堆栈指针, 内存管理信息还有各种函数调用堆栈信息等, 我们可以理解为是程序工作当前状态存储生成第一个文件, 许多的程序出错的时候都会产生一个 core 文件, 通过工具分析这个文件, 我们可以定位到程序异常退出的时候对应的堆栈调用等信息, 找出问题所在并进行及时解决
二 cored dump 开启
执行 ulimit c 检查是否开启 core dump, 若结果为 0, 则认为没有启用 core dump 文件的生成, 需要打开 core dump 开启 core dump 的方法有三种, 一种是临时启用, 两种是永久启用
临时启用
方法 1(ulimit 命令法)
执行如下命令:
ulimit -c 1024
或
ulimit -c unlimited
上例中, 前一种是限制 core dump 的文件大小不超过 1024K, 后一种是不限制 core dump 文件的大小, 现在的程序占用内存都比较凶猛, 以前写 C 程序需要计算内存的时代已经过去了如果不加限制, 可能一个 core 文件, 几个 G 就出去了所以最好还是限制该在小
永久启用的两个方法:
方法二(profile 文件修改法)
打开 / etc/profile 文件, 增加如下以下并生使其生效:
ulimit -S -c unlimited > /dev/null 2>&1
注: 如果该文件有 ulimit -S -c 0 > /dev/null 2>&1 一行, 需要先将该行注释掉设置完成后通过执行 source /etc/profile 生效
方法三(修改 / etc/security/limits.conf 文件)
找到 * soft core 0 行, 将其修改为如下内容:
这个方法可以针对指定用户或用户组打开 core dump, 如设置成 * soft core 10485760, 即 core dump 文件大小是 10G
需要注意的是此处的设置和方法二中的设置是冲突的, 在其中一处设置即可, 此处建议用第三种方法设置, 因为其可以针对不同的用户和组进行设置, 更加灵活
注: 上面三种方法设置都不需重启机器, 需要做的是退出终端并重新连接, 重启需要 core dump 的程序即可
三修改 core dump 文件格式
定制 core 的路径, 名称格式, 通过修改下面两个配置:
再说下第一句配置,/proc/sys/kernel/core_uses_pid 如果这个文件的内容被配置成 1, 那么即使 core_pattern 中没有设置 %p, 最后生成的 core dump 文件名仍会加上进程 ID
需要注意的是, 由于 / proc 下的配置是即时生效的, reboot 后, 之前的配置就会失效所以可以增加如下配置到 / etc/sysctl.conf 文件中, 如下:
保存后, 执行 sysctl -p 生效
注: 需要注意的是, 上面配置的 corefiles 该目录必须有写权限, 否则无法生成 core dump 文件, 可以通过下面的命令创建:
代码如下 | ||||
| ||||
代码如下 | ||||
| ||||
代码如下 | ||||
| ||||
代码如下 | ||||
|
来源: http://www.bubuko.com/infodetail-2490786.html