1. kernel.core_pattern 如何配置 core dump 落盘(路径、命名与管道转发),core 大小限制(ulimit -c)与生产环境的安全处置
kernel.core_pattern 如何配置 core dump 的落盘路径、命名与管道转发?ulimit -c 与 core 文件的生产环境安全处置如何配合?
- core_pattern 语法:路径、%p/%e/%t 等占位符与管道转发(|)
- ulimit -c 软硬限制与 systemd 对 core 的接管(core 存储到 journald/coredumpctl)
- 生产安全:权限、敏感内存、磁盘空间与保留策略
core dump 是进程崩溃时内核写入的内存转储,用于事后 gdb 调试。kernel.core_pattern 控制落盘行为:/var/crash/core.%p.%e 按 pid/可执行名落盘;支持 %p(pid)、%u(uid)、%e(可执行名)、%t(时间戳)、%s(信号)等占位符;以 | 开头为管道转发(如 |/usr/lib/systemd/systemd-coredump 交给 systemd-coredump 处理,或转发给自建采集服务),管道形式便于统一收集、压缩、脱敏。是否产生 core 还受 ulimit -c 限制:soft 为 0 时不生成(ulimit -c unlimited 放开),且须注意 core 生成还要求崩溃进程的 RLIMIT_CORE 与文件系统权限。
生产环境安全处置:core 含进程内存(可能含密钥、数据),必须限制属主与权限(如 umask 077、专用目录、设置 fs.suid_dumpable=0 禁止 setuid 程序 dump);限定大小与数量(systemd-coredump 的 Compress=、ExternalSizeMax、Storage=)防止磁盘打满;对核心业务可用 systemd-coredump + coredumpctl gdb <pid> 抓取调试;崩溃频繁时先定位根因再决定是否关闭 dump(kernel.core_pattern=/dev/null 或 ulimit -c 0 是临时止血)。容器内 dump 落盘与宿主路径需打通(通常配置到宿主共享目录)。
本题考察崩溃调试基础设施的配置与安全。回答要点:core_pattern 路径/占位符/管道三种形态、ulimit -c 与 systemd-coredump 的联动、权限与容量安全处置,形成"能产生、能取到、不泄漏、不拖垮磁盘"的完整方案。
sysctl kernel.core_pattern # 查看当前配置
sysctl -w kernel.core_pattern='/var/crash/core.%e.%p.%t'
ulimit -c unlimited # 当前 shell 放开 core
echo "kernel.core_pattern=|/usr/lib/systemd/systemd-coredump %p %u %g %s" >> /etc/sysctl.d/99-core.conf
coredumpctl list; coredumpctl gdb 12345 # systemd 侧查看/调试