灵感/技术来源:
- 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 的内存资源更重要吧。
文章评论