Core 文件分析

June 27, 2022

这篇文章主要介绍了Linux下的core文件分析方法。首先,文章解释了如何使用ulimit命令设置生成core文件,以及各参数的含义。接着,文章详细描述了core文件的生成过程和作用,以及如何设置core dump的文件目录和命名规则。文章还提供了如何使用gdb工具分析core文件的方法,并解释了在什么情况下可能不会生成core文件以及如何解决。最后,文章提供了相关的参考链接。

unlimit设置

ulimit -c unlimited 生成core文件,就是程序运行发行段错误时的文件

参数说明:

-a 显示目前资源限制的设定。

-c <core文件上限> 设定core文件的最大值,单位为区块。

-d <数据节区大小> 程序数据节区的最大值,单位为KB。

-f <文件大小> shell所能建立的最大文件,单位为区块。

-H 设定资源的硬性限制,也就是管理员所设下的限制。

-m <内存大小> 指定可使用内存的上限,单位为KB。

-n <文件数目> 指定同一时间最多可开启的文件数。

-p <缓冲区大小> 指定管道缓冲区的大小,单位512字节。

-s <堆叠大小> 指定堆叠的上限,单位为KB。

-S 设定资源的弹性限制。

-t <CPU时间> 指定CPU使用时间的上限,单位为秒。

-u <程序数目> 用户最多可开启的程序数目。

-v <虚拟内存大小> 指定可使用的虚拟内存上限,单位为KB

core文件

开发和使用Unix程序时, 有时程序莫名其妙的死了, 却没有任何的提示(有时候会提示core dumped). 这时候可以查看一下有没有形如core.进程号的文件生成, 这个文件便是操作系统把程序down掉时的内存内容扔出来生成的, 它可以做为调试程序的参考。 core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump.

设置Core Dump的核心转储文件目录和命名规则

在默认的情况下,很多系统的core文件是生成在你运行程序的目录下,或者你在程序中chdir后的那个目录,然后在core文件的后面加了一个 pid。在实际工作中,这样可能会造成很多目录下产生core文件,不便于管理,实际上,在2.6下,core文件的生成位置和文件名的命名都是可以配置 的。

/proc/sys/kernel/core_uses_pid 可以控制产生的core文件的文件名中是否添加pid作为扩展,如果添加则文件内容为1,否则为0

proc/sys/kernel/core_pattern 可以设置格式化的core文件保存位置或文件名,比如原来文件内容是core-%e 可以这样修改:

echo "/tmp/core-%e-%p" > core_pattern

将会控制所产生的core文件会存放到/corefile目录下,产生的文件名为core-命令名-pid-时间戳 以下是参数列表:

%p - insert pid into filename 添加pid
%u - insert current uid into filename 添加当前uid
%g - insert current gid into filename 添加当前gid
%s - insert signal that caused the coredump into the filename 添加导致产生core的信号
%t - insert UNIX time that the coredump occurred into filename 添加core文件生成时的unix时间
%h - insert hostname where the coredump happened into filename 添加主机名
%e - insert coredumping executable name into filename 添加命令名

分析core文件

gdb -c core文件路径 [应用程序的路径]

# 分析php core文件
sudo gdb -e /usr/local/php/sbin/php-fpm -c core.7569

进去后输入wherebt回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.

为什么没有core文件生成

有时候程序down了, 但是core文件却没有生成. core文件的生成跟你当前系统的环境设置有关系, 可以用下面的语句设置一下, 然后再运行程序便成生成core文件.

ulimit -c unlimited

参考

https://blog.csdn.net/u013427969/article/details/83962303

https://linuxtools-rst.readthedocs.io/zh_CN/latest/tool/gdb.html

Linux

IARNO

服务端开发

Conda 包管理工具

Dig 命令使用详解