Linux 关闭 Kdump(内核转储)并释放预留内存

2026-06-03 20点热度 1人点赞 0条评论

灵感/技术来源:

  • Red Hat Enterprise Linux 官方文档
  • Kdump 官方配置文档
  • grubby 手册
https://docs.redhat.com/en/documentation/red_hat_enterprise_linux_for_real_time/8/html/installing_rhel_8_for_real_time/configuring-kdump-on-the-command-line_installing-rhel8-for-real-time#configuring-kdump-memory-usage_configuring-kdump-on-the-command-line

Red Hat 官方文档指出,Kdump 所使用的内存是在系统启动阶段通过 crashkernel= 参数预留的,即使系统没有发生崩溃,这部分内存也无法被正常使用。


什么是 Kdump

Kdump 是 Linux 的内核崩溃转储机制。

当系统发生 Kernel Panic 时,会启动一个预留的 Capture Kernel(捕获内核),将崩溃时的内存信息保存为 vmcore 文件供管理员分析。

对于企业生产环境来说比较有价值。

但对于:

  • WordPress 网站
  • 个人博客
  • 小型 VPS
  • 测试服务器

通常几年都用不到一次,因此很多站长会选择关闭它并释放预留内存。


查询当前 Kdump 状态

查看服务状态:

systemctl status kdump

查看是否开机启动:

systemctl is-enabled kdump

查看 Kdump 预留内存:

cat /sys/kernel/kexec_crash_size

如果返回值不为 0,则说明系统已经预留内存。

例如:

268435456

表示预留了 256MB。


查询当前 crashkernel 配置

查看启动参数:

cat /proc/cmdline

例如:

BOOT_IMAGE=/vmlinuz...
crashkernel=auto

或者:

crashkernel=256M

也可以查看所有内核配置:

grubby --info=ALL

筛选查看:

grubby --info=ALL | grep crashkernel

修改 Kdump 内存大小

Red Hat 官方支持直接修改 crashkernel 参数。

例如修改为 128MB:

grubby --update-kernel=ALL --args="crashkernel=128M"

修改为 256MB:

grubby --update-kernel=ALL --args="crashkernel=256M"

修改完成后重启:

reboot

设置 Kdump 为 0

有些用户不想完全删除参数,而是希望保留配置。

可以设置:

grubby --update-kernel=ALL --args="crashkernel=0"

或者编辑:

/etc/default/grub

将:

crashkernel=auto

修改为:

crashkernel=0

随后重新生成 grub:

BIOS:

grub2-mkconfig -o /boot/grub2/grub.cfg

UEFI:

grub2-mkconfig -o /boot/efi/EFI/redhat/grub.cfg

然后重启系统。


完全关闭 Kdump

仅停止服务并不会释放已经预留的内存。

首先停止服务:

systemctl stop kdump

关闭开机启动:

systemctl disable kdump

然后删除启动参数:

grubby --update-kernel=ALL --remove-args="crashkernel"

查看结果:

grubby --info=ALL | grep crashkernel

如果没有任何输出,则说明参数已经移除。

最后重启:

reboot

验证状态

查看服务:

systemctl status kdump

应显示:

inactive (dead)

查看启动参数:

cat /proc/cmdline

不应再出现:

crashkernel=

查看预留内存:

cat /sys/kernel/kexec_crash_size

返回:

0

说明 Kdump 已完全释放内存。


查看系统推荐 Kdump 值

如果不确定应该设置多少内存,可以使用:

kdumpctl estimate

系统会根据:

  • 当前内核
  • 模块大小
  • initramfs
  • LUKS 加密配置

自动计算推荐值。

例如:

Reserved crashkernel:    256M
Recommended crashkernel: 652M

总结

查询 Kdump:

systemctl status kdump
cat /sys/kernel/kexec_crash_size
cat /proc/cmdline

修改 Kdump 内存:

grubby --update-kernel=ALL --args="crashkernel=128M"

设置为 0:

grubby --update-kernel=ALL --args="crashkernel=0"

完全关闭:

systemctl disable --now kdump
grubby --update-kernel=ALL --remove-args="crashkernel"
reboot

对于内存小鸡而言,相比记录死因的崩溃记录,多出来的几十到几百 MB 的内存资源更重要吧。

Lens pen

这个人很懒,什么都没留下

文章评论