(八)core文件详解

项目线上频繁的产生core文件,运维同事都有意见了,刚开始以为设置ulimit -c 0就可以了,但是ulimit只对当前会话有效,且这并不能真正解决程序崩溃的问题。

对于linux后台开发,经常会与core文件打交道。为了能够更好的分析其中的原理,就查阅一些资料来对core文件进行深入的学习。

参考:

1. coredump文件

core文件会包含了程序运行时的内存,寄存器状态,堆栈指针,内存管理信息还有各种函数调用堆栈信息等,我们可以理解为是程序工作当前状态存储生成第一个文件,许多的程序出错的时候都会产生一个core文件,通过工具分析这个文件,我们可以定位到程序异常退出的时候对应的堆栈调用等信息,找出问题所在并进行及时解决。

core dump 对于编程人员诊断和调试程序是非常有帮助的,有些程序错误是很难重现的,例如指针异常,而 core dump 文件可以再现程序出错时的情景.

[root@localhost]# cat  /proc/sys/kernel/core_pattern
core

/proc/sys/kernel/core_pattern文件, 用于控制Core文件的文件名. 默认情况下,只有一行:“core”.也支持定制,使用%配合不同的字符:

  • %p Core进程的PID
  • %u Core进程的UID
  • %s 造成Core的signal号
  • %t Core的时间,从1970-01-0100:00:00开始的秒数
  • %e Core进程对应的可执行文件名

2. linux命令

ulimit –c命令,可以查看和设置当前OS对于Core文件大小的限制

ld@ld-pc:~/workspace/cpp/net$ ulimit -c
0
ld@ld-pc:~/workspace/cpp/net$ ulimit -c unlimited
ld@ld-pc:~/workspace/cpp/net$ ulimit -c
unlimited
ld@ld-pc:~/workspace/cpp/net$ ulimit -c 1000
ld@ld-pc:~/workspace/cpp/net$ ulimit -c
1000

3. limit

cat /etc/security/limits.conf

#*               soft    core            0

4. getrlimit/setrlimit函数设置core dump

程序中开启core dump,可以通过函数查看和设置RLIMIT_CORE

3. kill

posted @ 2018-07-16 19:25  yvhqbat  阅读(1395)  评论(0编辑  收藏  举报