首页/系统/Linux 内核与性能调优速查/kernel.core_pattern 核心转储路径
sysctl 内核参数72 条

kernel.core_pattern 核心转储路径

定义崩溃核心文件的命名(内核默认 core,现代发行版多改为管道交给 systemd-coredump 统一管理)。

核心转储路径是什么

kernel.core_pattern 定义进程异常终止时生成的核心转储文件如何命名与存放,也可以用管道形式把转储内容交给用户态程序处理。许多现代发行版已改为管道模式,由系统服务统一收集、压缩并登记,便于用配套命令查看与清理。排查崩溃问题时,这个参数决定转储文件到底有没有落盘、落在哪里,是先要确认的一环。

基本信息

参数kernel.core_pattern
两种模式路径模板,或以竖线开头的管道写法(交给用户态处理程序)
前置条件进程的资源限制中核心文件大小不为 0,否则不会生成转储
传统命名模板中的百分号变量会被替换为进程标识与信号等信息
现代做法管道模式配合系统服务统一管理,可用配套工具列出与导出
适用范围全局设置,作用于所有产生转储的进程

典型使用场景

  • 排查进程崩溃:确认转储是否生成以及存放位置
  • 容器环境定位:管道处理程序在容器内可能不存在,导致转储无处落盘
  • 容量管理:大量转储文件会迅速占用磁盘,需要清理策略
  • 配置核对:确认模板写法与预期一致,避免路径被拆坏
  • 调试环境准备:为定位偶发崩溃提前确认转储链路可用

查看与调整

查看与调整
sysctl kernel.core_pattern                  # 读当前模板
ulimit -c                                   # 进程侧的核心文件大小限制
ulimit -c unlimited                         # 临时放开限制,仅当前会话有效
coredumpctl list | tail                     # 系统服务统一管理的转储列表
cat /proc/sys/kernel/core_uses_pid           # 传统模式下是否在文件名中追加进程号
df -h /var                                  # 确认转储目录所在分区余量

落盘与回读

落盘与回读
# /etc/sysctl.d/99-coredump.conf
kernel.core_pattern = /var/crash/core.%e.%p   # 传统路径模板示例
# 回读命令:sysctl kernel.core_pattern

常见现象与原因

现象原因处理方向
找不到转储文件进程限制为 0 或模板指向不存在的目录先查限制,再核对模板与目录
容器内不生成转储管道处理程序在容器内不可用改用路径模板或调整容器配置
转储生成但很小限制值偏小导致被截断放开限制后重新复现
磁盘被迅速占满转储文件体积大且未清理配置清理策略与容量监控
排查顺序不能颠倒:先看进程的资源限制,再看命名模板。限制为 0 时无论模板怎么配都不会产生文件,把顺序搞反会在错误的方向上花很多时间。
管道模式下模板串本身包含空格作为参数分隔,写入时需要按配置文件的语法处理,避免模板被拆坏导致转储丢失。修改后建议实际触发一次验证链路是否可用。

易错点

  • 忽略进程侧限制:限制为 0 时不生成任何转储,改模板毫无用处
  • 容器内沿用管道模式:处理程序缺失导致转储无法落地
  • 不评估磁盘容量:单次转储可能很大,密集崩溃会迅速占满分区
  • 模板写入时未处理空格:参数被拆开后转储链路失效
  • 改完不做验证:链路是否可用需要实际触发一次才能确认

数据来源与参考

  • Linux 内核 Documentation/admin-guide/sysctl/kernel.rst
  • man 5 core(core 文件命名)
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌