这篇文章主要介绍了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
进去后输入where
或bt
回车, 就可以显示程序在哪一行当掉的, 在哪个函数中.
为什么没有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