必须用kdump捕获内核崩溃内存镜像,90%失效因crashkernel未预留成功或捕获内核未加载;需验证/proc/cmdline含crashkernel、/sys/kernel/kexec_crash_size非零、/proc/meminfo有CrashKernel行。

Linux内核崩溃(kernel panic)时不会生成普通进程的 core 文件,必须用 kdump 捕获整个内核内存镜像;90% 的配置失败,是因为 crashkernel 内存根本没预留成功,或捕获内核压根没加载进内存。
验证 crashkernel 是否真正预留了内存
光在 /etc/default/grub 里写 crashkernel=256M 没用——运行时没划出内存,kdump 就是空架子。
-
cat /proc/cmdline | grep crashkernel必须有输出,比如crashkernel=256M或crashkernel=auto -
cat /sys/kernel/kexec_crash_size必须是非零数字(单位字节),例如268435456表示 256MB;返回0就说明失败 -
grep Crash /proc/meminfo应看到类似CrashKernel: 256000 kB的行 - ARM64 或 Alibaba Cloud Linux 3 等环境慎用
crashkernel=auto,容易因小页映射导致捕获内核响应慢;建议改用分段式:crashkernel=0M-2G:0M,2G-8G:192M,8G-:256M - 改完 grub 后必须执行
update-grub(Debian/Ubuntu)或grub2-mkconfig -o /boot/grub2/grub.cfg(RHEL/CentOS),然后重启
确认捕获内核已加载进内存
systemctl status kdump 显示 active (exited) ≠ 成功;关键看日志末尾有没有 Loaded kdump kernel:。
- 执行
kdumpctl status(部分发行版支持),输出应为Kdump is operational. - 检查 initramfs 是否含必要模块:
lsinitrd /boot/initramfs-$(uname -r)kdump.img | grep -i "kdump\|crash",至少要有makedumpfile和 TPM 相关驱动 - 内核升级后必须重建 initramfs:
kdumpctl force-rebuild(RHEL/CentOS)或dracut -f --regenerate-all(Fedora) - Ubuntu 安装
linux-crashdump后服务自动启用;RHEL/CentOS 需手动systemctl enable --now kdump - 若用 NFS/SSH 存储,
/etc/kdump.conf修改后必须重建 initramfs,否则新路径不生效
设置转储路径与避免静默失败
/etc/kdump.conf 里的 path 不是“写哪儿就存哪儿”,它依赖底层文件系统可写、空间充足、网络可达。
- 本地路径(如
path /var/crash):确保该分区剩余空间 ≥ 物理内存大小 × 1.2;执行df -h /var/crash确认够用 - NFS 路径(如
nfs nfs-server:/export/kdump):需提前在/etc/kdump.conf中配置,并确保 NFS server 已导出、客户端能挂载、rpcbind正常运行 - SSH 路径(如
ssh user@host:/path):要求目标主机sshd允许ForceCommand、密钥认证已配置、scp命令可用 - 路径目录必须存在且可写;NFS/SSH 场景下,
kdump不会自动创建远程目录,需手动准备 - 测试是否真能写入:执行
kdumpctl debug(部分发行版支持)或手动触发一次echo c > /proc/sysrq-trigger(仅限测试环境)
最常被忽略的是:crashkernel 预留失败时,kdump 服务状态一切正常,但实际完全无法捕获——所以别只信 systemctl status,一定要查 /sys/kernel/kexec_crash_size 和 /proc/meminfo 里的真实数值。











