Linux core dump使用
什么是 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文件。
注意
- 如果管道符号(‘|’)被用在core file pattern中,core dump文件的大小限制就不起作用了。
参考文献
本文部分内容翻译自
- https://medium.com/@sourabhedake/core-dumps-how-to-enable-them-73856a437711
- http://manpages.ubuntu.com/manpages/precise/man5/core.5.html
有兴趣的同学可以直接看英文原版。如有翻译问题请在评论区指出。
Linux core dump使用的更多相关文章
- 【转】 Linux Core Dump 介绍
=============================================================== Linux core dump的祥细介绍和使用 =========== ...
- Linux core dump file详解
Linux core dump file详解 http://www.cnblogs.com/langqi250/archive/2013/03/05/2944931.html
- Linux Core Dump
当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中,这种行为就叫做Core Dump(中文有的翻译成“核心转储”).我们可以认为 core dump 是“内存快 ...
- linux core dump 文件 gdb分析
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIG ...
- Segment fault及LINUX core dump详解 (zz)
C 程序在进行中发生segment fault(core dump)错误,通常与内存操作不当有关,主要有以下几种情况: (1)数组越界. (2)修改了只读内存. (3)scanf("%d&q ...
- Segment fault及LINUX core dump详解
源自:http://andyniu.iteye.com/blog/1965571 core dump的概念: A core dump is the recorded state of the work ...
- linux core dump学习
1. core dump是什么? core dump又叫核心转储,当操作系统收到特定的signal时, 会生成某个进程的core dump文件.这样程序员可以根据 已经生成的core dump文件来d ...
- Linux Core Dump【转】
转自:http://www.cnblogs.com/hazir/p/linxu_core_dump.html 当程序运行的过程中异常终止或崩溃,操作系统会将程序当时的内存状态记录下来,保存在一个文件中 ...
- linux core dump 生成和调试
core dump 某些信号的产生会导致产生core dump,包含了进程终止时的内存镜像.在某些时候这个core文件就非常的有用处,配合gdb或者lldb调试起来非常方便. 更详细的文档参考 Lin ...
- Linux core dump总结
文章链接:https://www.cnblogs.com/Anker/p/6079580.html 1.前言 一直在从事linux下后台开发,经常与core文件打交道.还记得刚开始从事linux下开发 ...
随机推荐
- 基础篇-http协议《http 简介、url详解、request》
目录 一.http 简介 二.url 详解 三.request 1.get 和 post 2.请求方法 3.request 组成 4.请求头 5.get 请求参数 6.post 请求参数 7.post ...
- 浏览器performance工具介绍及内存问题表现与监控内存的几种方式
一.GC的目的 为了实现内存空间的良性循环,performance提供多种监控方式监控内存 分析内存相关信息 当代码出现问题的时候及时定位到出现问题的代码块, 提高执行效率. preforcemanc ...
- 解决ROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'creat table study_record( id int(11) not null
之前一直用的好好的,突然就出现了这个错误: ERROR 1064 (42000): You have an error in your SQL syntax; check the manual tha ...
- Py集合,字符串的格式化,函数,便利
可变与不可变 不可变指的是:重新赋值时,内存中的id值会变得 其中有:字符串,数字,元组 name="sb" v=id(name) print(v) name ="ale ...
- CentOS 7.4通过rpm包离线安装 Mysql8.0并部署主从复制(附从库备份脚本)
一. 部署MySQL (两个节点都做) 下载 rpm包 wget https://goodrain-pkg.oss-cn-shanghai.aliyuncs.com/mysql8.rpm tar xv ...
- Vue之创建组件之配置路由!
Vue之创建组件之配置路由!== 第一步: 当然就是在我们的试图文件夹[views]新建一个文件夹比如home 在home文件夹下面新建一个文件index.vue 第二步:在router目录下做如下事 ...
- h3c交换机配置ssh密码验证登录方式
一.背景: 1.由于PC机串口不支持热插拔,请不要在交换机带电的情况下,将串口插入或者拔出PC机.当连接PC和交换机时,请先安装配置电缆的DB-9端到PC机,再连接RJ-45到交换机:在拆下时,先拔出 ...
- 超详细oracle 11g安装步骤 win版本
1. 打开网址: https://edelivery.oracle.com 使用oracle 任意账号登录 账号:2696671285@qq.com 密码:Oracle123 感谢来自某位好心大佬的共 ...
- 什么是 MVC 模式
概述 MVC,即 Model 模型.View 视图,及 Controller 控制器. View:视图,为用高糊提供使用界面,与用户直接进行交互. Model:模型,承载数据,并对用户提交请求进行计算 ...
- DP中的树上边/点覆盖问题
目录 树上边覆盖问题 例:luoguP2016 战略游戏 简述题意: Solution: Code 树上点覆盖问题 简述题意 Solution Code: 树上边覆盖问题 例:luoguP2016 战 ...