什么是 core dump?

core dump是一个当进程意外终止时包含进程内存内容的文件。当程序崩溃的时候,core dump由kernel触发。core dump可以作为程序崩溃时的事后快照(post-mortem snapshot),尤其是在难以可靠的重现故障的情况下。

大多数Linux系统默认开始core dump。但是通常这么做是有代价的。一方面我们想要去收集信息从而提高稳定性并且帮助我们排除故障;另一方面,我们希望限制debug的数据并且避免泄漏一些敏感数据。第一个选择适合于研究不稳定的程序的机器。第二个选择适用于存储和处理敏感数据。

开启 core dump

为了开启core dump,我们需要打开一下系统的软限制(soft limits)。

ulimit -S -c unlimited
  • -S:soft limit
  • -c:core dump的大小

如果想要永久的打开core dump,我们可以在 /etc/security/limits.conf 文件中添加下面这一句,

* soft core unlimited

除了指定为unlimited,即没有大小限制外,我们还可以直接指定大小,例如

ulimit -c 1024      限制大小为1024
ulimit -c 0 限制大小为0,即不输出core文件

当我们指定数字为0的时候,就意味着不输出core文件了。

当我们只使用-c参数的时候,就是查看core文件的大小限制,也就是关闭了core dump。

ulimit -c

关闭 core dump

core dump 通常需要占用我们的磁盘空间并且可能会包含一些敏感数据,所以我们有的时候需要关闭它。

我们可以通过更新soft limit来关闭core dump

ulimit -S -c 0

如果想要永久的关闭core dump,我们可以在 /etc/security/limits.conf 文件中添加下面这一句,

* soft core 0
* hard core 0

core dump在哪?

Linux通过一个配置的地址来保存core dump

默认路径是

/usr/libexec/abrt-hook-ccpp %s %c %p %u %g %t e %P %I

(%s %c %p %u %g %t e %P %I为core dump文件的命令规则,会在下一小节中解释)

我们可以通过sysctl命令来改变这个位置

sudo sysctl -w kernel.core_pattern=/coredumps/core-%e-%s-%u-%g-%p-%t

这个命令将会更新core_pattern文件/proc/sys/kernel/core_pattern到一个新的位置。

也可以通过在/etc/sysctl.conf中添加下面的代码来永久的改变core dump文件的路径,

kernel.core_pattern="/coredumps/core-%e-%s-%u-%g-%p-%t"

core dump文件的命名规则

默认情况下,一个core dump文件被命名为core,但是在/proc/sys/kernel/core_pattern文件中我们可以定义core dump文件的命名规则(参考上一节中的例子)。这个规则使用%标识符来代替一些当core dump文件被创建的时候可能的传来的值。

  • %%:一个%字符
  • %p:dumped进程的PID
  • %u:dumped进程的真实UID
  • %g:dumped进程的真实GID
  • %s:导致dump的信号个数
  • %t:dump的时间,精确到秒
  • %h:hostname
  • %e:可执行文件名
  • %c:core file大小的限制

例子

根据上面提到的命令,我们现在可以进行一些core dump的操作,查看core dump文件的大小限制、开启core dump、更新core file pattern去存储core dump到磁盘上。下面的操作可以看到在程序崩溃后产生了一个core dump文件。

Docker中使用core dump

在docker容器中,使用core dump需要在docker启动的时候就做好设定。我们可以利用--ulimit参数进行设定。

docker run -it -d --name=core-test --ulimit core=-1 image-test bash

这样在容器中,如果发生了程序崩溃,我们就可以在pwd,即当前目录下看到core文件。

注意

  1. 如果管道符号(‘|’)被用在core file pattern中,core dump文件的大小限制就不起作用了。

参考文献

本文部分内容翻译自

  1. https://medium.com/@sourabhedake/core-dumps-how-to-enable-them-73856a437711
  2. http://manpages.ubuntu.com/manpages/precise/man5/core.5.html

有兴趣的同学可以直接看英文原版。如有翻译问题请在评论区指出。

Linux core dump使用的更多相关文章

  1. 【转】 Linux Core Dump 介绍

    ===============================================================  Linux core dump的祥细介绍和使用 =========== ...

  2. Linux core dump file详解

    Linux core dump file详解 http://www.cnblogs.com/langqi250/archive/2013/03/05/2944931.html

  3. Linux Core Dump

    当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 core dump 是“内存快 ...

  4. linux core dump 文件 gdb分析

    core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...

  5. Segment fault及LINUX core dump详解 (zz)

    C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...

  6. Segment fault及LINUX core dump详解

    源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...

  7. linux core dump学习

    1. core dump是什么? core dump又叫核心转储,当操作系统收到特定的signal时, 会生成某个进程的core dump文件.这样程序员可以根据 已经生成的core dump文件来d ...

  8. Linux Core Dump【转】

    转自:http://www.cnblogs.com/hazir/p/linxu_core_dump.html 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中 ...

  9. linux core dump 生成和调试

    core dump 某些信号的产生会导致产生core dump,包含了进程终止时的内存镜像.在某些时候这个core文件就非常的有用处,配合gdb或者lldb调试起来非常方便. 更详细的文档参考 Lin ...

  10. Linux core dump总结

    文章链接:https://www.cnblogs.com/Anker/p/6079580.html 1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发 ...

随机推荐

  1. v-model语法糖

    其实v-model就是一个结合了v-bind和v-on的语法糖,实现了双向数据绑定. 举个(栗子):

  2. 视图V_160M和表T_160M的维护

    今天发现一个视图,通过SM30居然无法维护,这个视图就是V_160M,表为T_160M,是采购相关的系统消息, 不过别着急,有办法维护的,呵呵,看下面: 试一试OMCQ这个事物代码吧! 分享出来,给需 ...

  3. AOP面向切面编程(使用注解和使用配置文件)

    Aop(面向切面编程) 使用注解的方式: 加入相应的jar包: com.springsource.org.aopalliance-1.0.0.jar com.springsource.org.aspe ...

  4. 在EXCEL中如何同时冻结行与列?

    鼠标所在的单元格的位置 ,决定了你冻结的行和列.如: 冻结第一行与第一列, 只需要将鼠标置于单元格在第二列,第二行. 点击冻结

  5. JS实现计算器,带三角函数,根号

    极简主义网页计算器. 实现了按键特效,可响应键盘按键,实时显示计算结果. 可切换模式,拓展高级功能,包括根号.三角函数.括号等. 效果如下: 代码如下: html: <!DOCTYPE html ...

  6. Spring 是如何解决循环依赖的?

    前言 相信很多小伙伴在工作中都会遇到循环依赖,不过大多数它是这样显示的: 还会提示这么一句: Requested bean is currently in creation: Is there an ...

  7. 使用Bat自动打包并通过FTP发送到备份服务器——实战测试

    这个bat文件要求本地安装有winrar解压软件,位置是:C:\Program Files\WinRAR\WinRAR.exe 如果执行报错,请检查你复制我的代码是否有问题,有些复制粘贴进去后因为一些 ...

  8. Angular入门到精通系列教程(14)- Angular 编译打包 & Docker发布

    目录 1. 概要 2. 编译打包 2.1. 基本打包命令 2.2. 打包部署到二级目录 3. Angular站点的发布 3.1. web服务器发布 3.2. 使用docker发布 4. 总结 环境: ...

  9. python基础之 列表、元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码

    本节内容 列表.元组操作 字符串操作 字典操作 集合操作 文件操作 字符编码与转码 1. 列表.元组操作 列表是我们最以后最常用的数据类型之一,通过列表可以对数据实现最方便的存储.修改等操作 定义列表 ...

  10. HBase性能优化完全版

    近期在处理HBase的业务方面常常遇到各种瓶颈,一天大概一亿条数据,在HBase性能调优方面进行相关配置和调优后取得了一定的成效,于是,特此在这里总结了一下关于HBase全面的配置,主要参考我的另外两 ...