本网站(662p.com)打包出售,且带程序代码数据,662p.com域名,程序内核采用TP框架开发,需要联系扣扣:2360248666 /wx:lianweikj
精品域名一口价出售:1y1m.com(350元) ,6b7b.com(400元) , 5k5j.com(380元) , yayj.com(1800元), jiongzhun.com(1000元) , niuzen.com(2800元) , zennei.com(5000元)
需要联系扣扣:2360248666 /wx:lianweikj
Linux core dump使用
yuanzun168 · 279浏览 · 发布于2021-02-08 +关注

什么是 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

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


相关推荐

将Fedora 29升级到Fedora 30

吴振华 · 697浏览 · 2019-05-14 22:00:02
使用Nginx反向代理到go-fastdfs

iamitnan · 719浏览 · 2019-05-23 13:42:00
利用VLC搭建组播流服务器

追忆似水年华 · 2683浏览 · 2019-06-14 11:27:06
用Bash脚本监控Linux上的内存使用情况

吴振华 · 962浏览 · 2019-06-24 11:27:02
加载中

0评论

评论
欢迎大家关注我的个人主页!!!
分类专栏
小鸟云服务器
扫码进入手机网页