coredumpctl 是什么
程序异常崩溃时,内核按 core_pattern 生成核心转储;在 systemd 系统上通常由 systemd-coredump 接管,统一存到 /var/lib/systemd/coredump 并把元数据写进 journal。coredumpctl 就是查询这些记录的入口:list 列出崩溃历史,info 看崩溃进程、信号与调用栈,dump 导出转储文件,debug 直接进调试器。比起遍地找 core 文件,它把「什么时候哪程序崩了」变得一目了然。
基本信息
| 适用平台 | systemd 系:openEuler、麒麟、UOS、RHEL 8/9 |
|---|---|
| 列出记录 | coredumpctl list(可加 --since 过滤时间) |
| 看详情 | coredumpctl info 进程名或 PID |
| 导出转储 | coredumpctl dump PID -o /tmp/core.PID |
| 存储策略 | /etc/systemd/coredump.conf 控制位置、容量与是否压缩 |
典型使用场景
- 服务反复重启:从崩溃记录里确认是段错误还是被杀
- 开发定位:把转储交给开发同事配合调试符号分析调用栈
- 磁盘告警:转储文件占用空间大,按记录清理历史
- 上线验证:新版本发布后盯一段时间内是否出现新的崩溃记录
- 安全事件分析:进程异常终止时保留现场,判断是崩溃还是被结束
常用命令
常用命令
coredumpctl list # 列出全部崩溃记录
coredumpctl list --since '1 day ago' # 只看最近一天
coredumpctl info /usr/bin/myapp # 按程序名看详情(含调用栈)
coredumpctl info 12345 # 按 PID 查看
coredumpctl dump 12345 -o /tmp/core.12345 # 导出转储文件
coredumpctl debug 12345 # 直接进入 gdb 调试
journalctl -u systemd-coredump -n 20 --no-pager # 看接管服务日志存储策略与生成条件
存储策略与生成条件
# /etc/systemd/coredump.conf
[Coredump]
Storage=external # none 不存 / journal 只进日志 / external 存文件
Compress=yes
MaxUse=1G # 转储总量上限
KeepFree=2G # 保留的最小可用空间
# 检查内核接管方式与进程限制
cat /proc/sys/kernel/core_pattern # 是否为 systemd-coredump
ulimit -c unlimited # 应用侧允许生成转储
sysctl kernel.core_pattern # 查看当前内核设置记录字段读法
| 字段 | 含义 | 排查用途 |
|---|---|---|
| TIME | 崩溃时间 | 与业务异常时间点对齐 |
| PID | 崩溃进程号 | 用于 dump 与 debug 定位 |
| SIG | 终止信号 | SIGSEGV 段错误、SIGABRT 主动中止、SIGKILL 被强制结束 |
| CORE | 是否保留转储文件 | present 表示可用,missing 需检查存储策略 |
| EXE | 可执行文件路径 | 确认是哪个程序而非同名脚本 |
| Stack trace | 调用栈 | 交给开发定位到具体模块 |
内核 core_pattern 指向 systemd-coredump 时才由其接管;应用侧还要 ulimit -c unlimited 允许生成,否则记录为空。
转储文件可能包含进程内存中的口令、密钥等敏感数据,访问权限要按 coredump.conf 收紧,对外传递遵循安全流程。