首页/系统/信创系统运维速查/coredumpctl 查看崩溃核心转储
服务与运维65 条

coredumpctl 查看崩溃核心转储

程序崩溃后 systemd-coredump 接管核心转储:coredumpctl list 列出记录、info 查看崩溃信息、debug 进入调试;配合 coredump.conf 控制存储策略。

信创系统运维速查系统更新于 2026-10-13

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 收紧,对外传递遵循安全流程。

易错点

  • 存储策略设为 none 或应用 ulimit -c 为 0 时,只有记录没有转储文件,CORE 列显示 missing,事后无法分析。
  • coredumpctl 的元数据来自 journal,日志被轮转清理后旧记录随之消失,需要调试的证据要及时导出。
  • MaxUse 未限制时大量崩溃会迅速占满 /var,引发其他服务故障。
  • 只看 SIG 就下结论:SIGKILL 多是被 OOM 或人工结束,SIGSEGV 才是程序自身崩溃,排查方向完全不同。
  • 转储文件含敏感内存数据却按普通文件权限存放,安全核查中属于高风险项。

数据来源与参考

  • man 1 coredumpctl
  • man 5 coredump.conf
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌