core dump 分析与实践

什么是 core dump ?

进程接收到某些信号(signal)后, 异常终止,并记录当前内存等状态的镜像文件,即 core dump file,简称 core 文件。

这些导致 core 的信号如下:

信号(signal) 描述
SIGABRT 异常终止(abort())
SIGBUS 硬件异常,通常是错误的内存访问
SIGEMT 硬件异常
SIGTRAP 硬件异常。一般是调试异常
SIGILL 非法指令异常
SIGIOT 硬件异常,一般对应SIGABRT
SIGFPE 算术异常,如被0除,浮点溢出等
SIGILL 非法指令异常
SIGQUIT 终端退出符
SIGSEGV 非法内存访问
SIGSYS 非法系统调用
SIGXCPU CPU时间限制超时(setrlimit)
SIGXFSZ 超过文件长度限制(setrlimit)

core 文件的作用

   gdb -c [core file] [exec file]
   gdb [exec file] [core file | pid]
  • 调试 core 文件,查看程序终止时状态。
  • 调试 core 文件,学习、测试服务调用流程(自己制作 core)。
    制作 core 的方法:
    $ gcore <pid> # 方法1
    $ gdb -q – <pid>  #方法2
    (gdb) generate-core-file
    (gdb) detach
    (gdb) quit

在 OS 上配置 core

A. 设置生成 core 文件

系统默认不生成 core 文件

  1. 检查 core 文件大小
    $ ulimit -c # 显示 core 大小,为 0 则不生成 core

    $ ulimit -a # 列出所有资源的限制
  • 为所有用户设置生成 core
    $ su - # 获得 root 权限
    # echo 'ulimit -S -c unlimited > /dev/null 2>&1' >> /etc/profile

    或者为单个用户设置core:
    ulimit -c unlimited # unlimited 可以为数字,如1024
    或者修改 ~/.bashrc 或 ~/.bash_profile 文件

    使设置生效:
    source /etc/profile

  • 设置进程 ID (pid)为 core 文件扩展名
    修改 /proc/sys/kernel/core_uses_pid 文件内容为: 1
    root@lyg:~# sysctl -w kernel.core_uses_pid=1
    kernel.core_uses_pid = 1

  • 设置 core 文件位置和格式
    修改 /proc/sys/kernel/core_pattern 文件
    root@lyg:~# sysctl -w kernel.core_pattern=/tmp/core-%e-%p-%t
    kernel.core_pattern = /tmp/core-%e-%p-%t
    其中,
    /tmp/ :是存放 core 文件的目录(默认是进程 core 时在的目录);
    core-%e-%p-%t:是 core 文件格式。

         **%p** - 进程ID(pid)
         **%u** - 用户ID(uid)
         **%g** - 用户组ID(gid)
         **%s** - 导致 core 的信号
         **%t** - core 的 unix 时间
         **%h** - 主机名
         **%e** - 导致 core 的命令名
    
B. 测试产生 core
         $ su - 
         # kill -s SIGSEGV $$
 **或**
     # sleep 10 &
     # killall -SIGSEGV sleep
     # kill -s SEGV <PID>

 查看 /tmp/ 目录下是否生成 core 文件。

参考链接

要注意的问题:

  1. 保证进程对存放 core 文件的目录有写权限。
  2. 若程序调用seteuid()/setegid() 改变了进程的有效用户或组,则默认情况下系统不为这些进程生成 core 文件。除非将 /proc/sys/fs /suid_dumpable 文件的内容改为1(一般默认是0)。
  3. 设置足够大的Core文件大小限制。程序崩溃时生成Core文件大小即为程序运行时占用的内存大小。但程序崩溃时的行为不可按平常时的行为来估计,比如缓冲区溢出等错误可能导致堆栈被破坏,因此经常会出现某个变量的值被修改成乱七八糟的,然后程序用这个大小去申请内存就可能导致程序比平常时多占用很多内存。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容