Linux 配置 coredump
core dump又叫核心转储, 当程序运行过程中发生异常, 程序异常退出时, 由操作系统把程序当前的内存状况存储在一个core文件中, 叫core dump. (linux中如果内存越界会收到SIGSEGV信号,然后就会core dump)
一、 传统 core dump 配置
1.1 开启 core dump
编辑 /etc/security/limits.conf
文件,添加或修改以下行:
* soft core unlimited |
该配置允许用户生成无限大小的core文件
1.2 配置命名模板以及自定义core文件存储目录
创建目录并修改权限如下:mkdir /var/coredumps
chmod 1777 /var/coredumps
编辑 /etc/sysctl.conf
添加或修改以下行:
kernel.core_pattern = /var/coredumps/core-%e-%s-%u-%g-%p-%t |
- %e: 可执行文件名
- %s: 导致 core dump 的信号号
- %u: 进程的实际用户 ID
- %g: 进程的实际组 ID
- %p: 进程 ID
- %t: core dump 的时间(UNIX 时间戳)
应用并生效sysctl -p
二、 配置基于 systemd 的 core dump
编辑 /etc/systemd/system.conf
文件,找到并修改(或添加)以下行:
DumpCore=yes |
编辑 /etc/systemd/coredump.conf
文件, 保持默认配置即可
[Coredump] |
重载 systemd 配置
systemctl daemon-reexec
编辑 /etc/sysctl.conf
添加或修改以下行:
kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %P %u %g %s %t %c %h |
应用并生效sysctl -p
三、 core dump 实例分析
使用一个简单的 C 程序验证 core dump
|
编译并执行 gcc test.c && ./a.out
3.1 传统方式 coredump 处理
使用 gdb 工具调试 core dump 文件
gdb <path_to_executable> <path_to_core_dump_file>
3.2 基于systemd的 coredump 处理
该模式下的核心转储文件默认保存在 var/lib/systemd/coredump
, 默认保存三天
使用 coredumpctl 查看和管理核心转储
列出核心转储
coredump list
*
表示已存储的核心查看特定进程的核心转储
coredumpctl list <process_name>
查看核心转储的详细信息
coredumpctl info <PID>
分析核心转储文件
coredumpctl gdb <PID>
删除核心转储文件
coredumpctl remove <PID>