必须验证crashkernel是否真正生效:cat /proc/cmdline需含crashkernel参数,/sys/kernel/kexec_crash_size返回非零值,/proc/meminfo中存在CrashKernel行,三者缺一不可。

crashkernel 参数是否真的生效了
内核启动时没预留内存,kdump 就是空转。不能只看 /etc/default/grub 里有没有 crashkernel=,得看运行时状态:
- 执行
cat /proc/cmdline,确认输出含crashkernel=128M@64M或crashkernel=auto(注意:老内核或内存 auto 常失效) - 执行
cat /sys/kernel/kexec_crash_size,返回值必须是非零数字(单位字节),比如134217728表示 128MB;返回0说明根本没预留 - 执行
grep Crash /proc/meminfo,应看到类似CrashKernel: 128000 kB的行;没有则失败
常见坑:crashkernel=auto 在某些 ARM64 或低内存系统上会静默退化为 0;建议显式写成 crashkernel=256M(ARM64)或 crashkernel=128M(x86_64)。
kdump 服务是否加载了捕获内核
服务状态显示 active ≠ 捕获内核已就绪。必须确认第二内核镜像和 initramfs 已载入内存:
- 执行
systemctl status kdump,重点看最后一行日志是否含Loaded kdump kernel;若只有Starting kdump service且无后续成功提示,大概率失败 - 执行
kdumpctl status(部分发行版提供),输出应为Kdump is operational. - 执行
lsinitrd /boot/initramfs-$(uname -r)kdump.img | grep -i "kdump\|crash",确认 initramfs 里有makedumpfile、kernel/drivers/char/tpm/等关键模块
常见坑:升级内核后没重建 kdump initramfs;需手动运行 kdumpctl force-rebuild 或 dracut -f --regenerate-all,否则新内核下 kdump 无法启动捕获内核。
vmcore 没生成在 /var/crash 怎么办
不是所有“崩溃”都会走 kdump 流程,也不是所有配置路径都默认可用:
- 手动触发前务必执行
echo 1 > /proc/sys/kernel/sysrq,否则echo c > /proc/sysrq-trigger无效 - 检查
/etc/kdump.conf中path是否指向可写目录,且该目录所在文件系统有足够空间(至少 > 当前free -m中的used值) - 若用 NFS 或 SSH 存储,确保
network行配置正确,且目标端口/认证/路径可达;本地调试建议先用裸设备方式(如ext4 /dev/sda1)绕过挂载问题 -
core_collector makedumpfile -c --message-level 1 -d 31若压缩失败(如内存碎片严重),会静默跳过写入;临时可注释该行改用core_collector cp看是否能生成未压缩 vmcore
crash 分析时提示版本不匹配或符号缺失
crash 无法解析 vmcore,90% 是调试符号不匹配或缺失:
- 必须安装与当前内核版本完全一致的
kernel-debuginfo包:sudo yum install kernel-debuginfo-$(uname -r)(RHEL/CentOS)或sudo apt install linux-image-$(uname -r)-dbgsym(Ubuntu) - 确认
vmlinux文件存在且路径正确:/usr/lib/debug/lib/modules/$(uname -r)/vmlinux;若不存在,检查 debuginfo 包是否真装上了 - 启动 crash 时必须同时指定
vmlinux和vmcore:crash /usr/lib/debug/lib/modules/$(uname -r)/vmlinux /var/crash/xxx/vmcore - 若仍报错,尝试用
file /usr/lib/debug/lib/modules/$(uname -r)/vmlinux验证其是否含调试段(输出应含with debug_info)
最易被忽略的是:内核升级后,debuginfo 包没同步更新,或 vmlinux 被误删;此时 crash 会静默降级为无符号模式,导致 bt、ps 等命令输出大量地址而非函数名。











