Linux中的COREDUMP基础知识及配置方法

本文最后更新于:2024年10月8日 晚上

1、coredump简介

​在系统的运行过程中,有许多时候会出现程序运行不正常的情况,进而产生崩溃现象,而为了方便记录和追溯问题的发生进程和或相关的线程信息,亦或是崩溃时间等,有了coredump这种文件。

  • Linux中的dump文件为core文件,以core开头,类似如下:

    image-20230112112849208

  • Windows中dump文件为dmp文件,类似如下:

    image-20230112112958003

2、core生成限制

1
2
3
4
5
6
# 检查core生成大小限制
ulimit -c
# 检查文件大小限制
ulimit
# 限制大小不超过1024KB
ulimit -c 1024

返回值含义:

  • 0—-禁止生成core文件
  • ulimited—-未限制core大小
  • 数值—-限制大小不超过该设定值KB
1
2
# 设定为无限制
ulimit -c unlimited

image-20230112105439700

1
2
# 检查所有的用户配置,各项返回值含义同上
ulimit -a

image-20230112113607292

设定单一用户程序上限:

1
2
# 设定单个用户程序上限为3:限制生成的dump数量
ulimit -u 3

image-20230112114526249

设定之后,会将单个程序的core数量限制在设定值之内:

image-20231024014749829

3、core相关配置

3-1、配置文件

1
2
3
4
# 配置文件
/proc/sys/kernel/core_pattern
# 查询结果为执行core生成的程序路径,及生成格式
cat /proc/sys/kernel/core_pattern

image-20230112105615231

程序段中记录着详细的core生成路径:

1
cat /bin/coredump-handler.sh

image-20231024014844990

3-2、配置文件格式

1
2
3
4
5
6
7
8
9
%p 转储过程的PID
%u (数字)转储进程的实际UID
%G (数字)转储过程的实际GID
%s 引起转储的信号数
%t 转储时间,表示为自1970年1月1日00:00:00 +0000(UTC)以来的秒数
%H 主机名(与uname(2)返回的节点名相同)
%e 可执行文件名(无路径前缀)
%E 可执行文件的路径名,用斜杠(’/’)替换为感叹号(’!’)。
%C 崩溃过程的核心文件大小软资源限制(自Linux 2.6.24开始)

4、core生成验证

使用kill指令或pkill指令来验证core生成逻辑:

1
2
3
4
5
# 根据进程名来abort进程并生成core文件
pkill -6 proc_name
# 根据PID来abort进程并生成core文件
ps -aux | grep proc_name
kill -6 [PID]

image-20231024014918951

拓展:kill -l查看kill对应的信号量列表

image-20230112142536039

5、core调试

1
2
3
# gdb 程序名称 core名称
# 示例:
gdb someip_manager core_someip_manager__6609_1672103695

gdb面板输入where或者bt查找出错的那一行或函数,具体错误信息可以在#0~#05中查看:

image-20230112142121648

image-20230112162822742


Linux中的COREDUMP基础知识及配置方法
http://www.codestar.top/2023/10/24/Linux/Linux中的COREDUMP基础知识及配置方法/
作者
mini小新
发布于
2023年10月24日
更新于
2024年10月8日
许可协议