核心转储路径是什么
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 时无论模板怎么配都不会产生文件,把顺序搞反会在错误的方向上花很多时间。
管道模式下模板串本身包含空格作为参数分隔,写入时需要按配置文件的语法处理,避免模板被拆坏导致转储丢失。修改后建议实际触发一次验证链路是否可用。