买云服务器时选了 2G 或 4G 内存,SSH 上去敲一条 free -h,却发现“可用”那栏比预期少了一大截——这种情况在阿里云、腾讯云、AWS 的 Linux 镜像上都很常见。除了系统本身和面板占用,最大的“隐形吞噬者”通常是 kdump / crashkernel 预留内存。本文把它讲清楚,并给出可安全操作的回收办法。
一、什么是 kdump 与 crashkernel 预留
kdump 是 Linux 内核的崩溃转储机制:当系统发生 kernel panic 时,它会用一块提前预留好的独立内存启动一个捕获内核(capture kernel),把崩溃现场的内存镜像存成 vmcore 供事后分析。这块预留内存就叫 crashkernel。
问题在于:这块内存平时一直被占用、普通进程用不到。在内存紧张的小规格实例上,预留量可能高达几百 MB 甚至上 GB,对只跑轻量服务(如前面提到的 阿里云/腾讯云 Linux 系统预留内存的解决办法 里讨论的场景)来说相当心疼。
二、怎么查看当前预留了多少
先确认 kdump 是否在用、预留了多少:
# 查看内核启动参数里 crashkernel 的设置
cat /proc/cmdline | tr ' ' '\n' | grep crashkernel
# 查看 kdump 服务状态
systemctl status kdump 2>/dev/null || service kdump status
# 实际可用内存
free -h
如果 /proc/cmdline 里有 crashkernel=auto 或 crashkernel=256M 之类,说明预留已生效。auto 不是“自动为 0”,而是内核按规则算出一个值(通常和物理内存正相关)。
三、主流云厂商的默认预留差异
不同发行版和云镜像默认值差异很大:CentOS/RHEL 系往往默认开启 kdump 并预留较多;Ubuntu 云镜像多数默认不启用 kdump,预留为 0。这也是同一配置下阿里云 CentOS 实例“内存少了”而 Ubuntu 实例“没少”的原因。关于各家云主机内存问题的更多讨论,可参考 阿里云 腾讯云 Linux 系统预留内存的解决办法。
四、如何安全减小或关闭预留
如果你的服务器是纯粹的业务机、不需要内核崩溃分析,可以直接把预留调小或关掉。操作就是改 GRUB 启动参数后重新生成配置。
4.1 Ubuntu / Debian
# 编辑 GRUB 配置,删掉/改成下面的样子
# GRUB_CMDLINE_LINUX="crashkernel=256M"
sudo sed -i 's/crashkernel=[^ ]*//g' /etc/default/grub
sudo update-grub
sudo reboot
4.2 CentOS / AlmaLinux / Rocky
sudo grubby --update-kernel=ALL --remove-args="crashkernel"
# 或编辑 /etc/default/grub 后:
sudo grub2-mkconfig -o /boot/grub2/grub.cfg
sudo reboot
改完重启,再用 free -h 对比,可用内存通常会回来几百 MB 到 1G 不等。
五、减小前后的注意事项
① 关闭 kdump 意味着失去内核崩溃后的现场回溯能力,生产核心节点建议保留,最多把预留调到 256M;② 改 GRUB 务必确认语法正确,否则可能起不来,云厂商控制台带的“串行控制台/VNC”是你的救命通道;③ 服务器暴露在公网时,内存回收之余别忘了安全防护,比如给站点前置 堡塔 WAF 防火墙专业版,或用 1Panel 面板 做集中运维。另外若遇到 Web 组件异常(如 Elementor 幻灯导航无效的 BUG),那是上层问题,和内存预留无关。
小结:小内存实例上,评估清楚不需要内核转储后,回收 crashkernel 预留是最划算的“免费扩容”。










暂无评论内容