首页/系统/Linux 内核与性能调优速查/kdump 崩溃转储配置检查
内存与 OOM58 条

kdump 崩溃转储配置检查

内核崩溃时由 kdump 捕获 vmcore 供 crash 分析;需要预留 crashkernel 内存并启用相应服务,确认转储目标空间充足。

什么是 kdump

kdump 是 Linux 的崩溃转储机制:系统启动时通过 crashkernel= 参数预留一块内核不使用的内存,并在其中常驻一个捕获内核;当主内核 panic 或触发 sysrq 崩溃时,捕获内核接管并把内存镜像写成 vmcore。与事后靠日志猜测相比,vmcore 能用 crash 工具还原调用栈,是定位内核态故障的可靠依据。

基本信息

内核参数crashkernel=(/etc/default/grub 或 grubby 配置)
服务kdump.service(Debian 系为 kdump-tools)
加载状态/sys/kernel/kexec_crash_loaded 为 1 表示就绪
默认产物/var/crash/<时间>/vmcore
分析工具crash、drgn(需匹配版本的 vmlinux 与 debuginfo

典型使用场景

  • 生产机器内核 panic 后需要还原原因,而不是只看到重启记录
  • 内核升级、驱动或文件系统上线前做验证,确保崩溃时可取证
  • 排查疑似内核 bug:配合 sysrq-trigger 主动触发一次崩溃做演练
  • 合规与审计要求保留系统崩溃证据链
  • 容器宿主与虚拟化节点的稳定性分析

检查与验证

检查与验证
grep -o 'crashkernel=[^ ]*' /proc/cmdline      # 是否预留了内存
cat /sys/kernel/kexec_crash_loaded               # 1=捕获内核已加载
systemctl is-active kdump                        # 服务状态
ls -lh /var/crash/ 2>/dev/null | head            # 已有转储与目标空间
systemctl status kdump | head -5                 # 启动失败原因常在此
# 演练:echo c > /proc/sysrq-trigger(测试机专用,会立即宕机)

状态判读与处置

检查项正常值异常时
crashkernel形如 crashkernel=512M 或 auto为空说明未预留,配置后须重启生效
kexec_crash_loaded1为 0 说明服务未成功加载,看 kdump 服务日志
kdump.serviceactive (exited)failed 常见原因是预留不足或目标目录不可写
/var/crash 剩余空间大于 vmcore 估计大小空间不足会转储失败,可改 dump_path 到独立分区
只做了配置从没验证过:需要实际触发一次或至少确认 kexec_crash_loaded=1,否则故障当天才发现转储不可用。
crashkernel 预留值需按内存规模与内核大小选:过小加载失败,过大白白占内存;部分发行版支持 crashkernel=auto 自动估算。
转储目标可以在配置文件里改(RHEL 系为 kdumpctl 与 /etc/kdump.conf,可指定本地路径、NFS、raw 设备或 ssh 目标);走 ssh 时需预置免密密钥,否则崩溃现场才发现写入失败。Debian 系由 kdump-tools 提供,配置文件路径以该发行版文档为准。

易错点

  • crashkernel 预留会减少可用内存,必须按内核大小与业务内存需求权衡取值
  • 经常崩但从不验证转储可用性,关键时刻才发现配置无效(服务没起来、预留不足、目标写不进去)
  • vmcore 体积可接近物理内存大小,转储目录若在同一分区会把根分区写满,建议落到独立分区或网络路径
  • 分析 vmcore 需要与内核版本严格匹配的 vmlinux/debuginfo,升级内核后要同步更新调试符号

数据来源与参考

  • Linux 内核 Documentation/admin-guide/kdump/kdump.rst
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌