商城首页欢迎来到中国正版软件门户

您的位置:首页 >如何在Linux中配置具体的系统物理内存保留区大小

如何在Linux中配置具体的系统物理内存保留区大小

  发布于2026-08-12 阅读(0)

扫一扫,手机访问

有个细节很容易踩坑:crashkernel 参数必须写进 GRUB_CMDLINE_LINUX,不能放到 _GRUB_CMDLINE_LINUX_DEFAULT 里,不然内核根本不会解析。配置完之后,别只看“像是生效了”,最好做三步确认:先用 cat /sys/kernel/kexec_crash_size 看返回值是否非零;再检查 dmesg 里有没有 “Reserving...for crashkernel”;最后确认 /proc/iomem 中是否出现 “Crash kernel” 条目。这三项都对上,才算真正生效。

如何在Linux中配置具体的系统物理内存保留区大小

crashkernel= 参数必须写在 GRUB_CMDLINE_LINUX 中

Linux 中为 kdump 预留内存,crashkernel= 必须出现在 GRUB_CMDLINE_LINUX(而非 GRUB_CMDLINE_LINUX_DEFAULT)里,否则内核根本不会解析它。很多用户改错位置后发现 dmesg | grep -i crash 没输出、/sys/kernel/kexec_crash_size 为 0,就是这个原因。

实操建议:

  • 编辑 /etc/default/grub,找到 GRUB_CMDLINE_LINUX= 行(不是 _DEFAULT),在其引号内添加 crashkernel=128M 或更复杂的表达式
  • 若该行为空或不存在,直接添加: GRUB_CMDLINE_LINUX="crashkernel=128M"
  • 运行 sudo update-grubsudo reboot,否则修改不生效

crashkernel=128M 和 crashkernel=auto 的行为差异

crashkernel=auto 这项配置,别把它理解成“系统会自动挑一个最优值”。它本质上还是按硬编码规则去查表执行:在 x86_64 平台上,只有物理内存 ≥ 1GB 时才会生效;而 ARM64 和 Power 平台,则要求物理内存 ≥ 2GB。达不到这个门槛,系统就不会预留任何内存——这时在 /proc/meminfo 里也看不到 CmaTotal,同时 kdump 服务启动会直接失败,并报出 “No memory reserved for crash kernel”。

手动指定更可靠:

  • crashkernel=128M:固定预留 128MB,适用于内存 ≥ 2GB 的常见服务器
  • crashkernel=512M-2G:64M,2G-:128M:按物理内存分段预留,避免小内存机器浪费过多
  • 注意单位大小写:M(兆字节)合法,mMB 在多数内核版本中会被忽略或报错

mem= 参数会覆盖物理内存总量,不是“预留”而是“截断”

mem= 是限制内核可管理的内存上限,比如 mem=32G 在 64G 机器上,会导致后 32G 物理内存完全不可见 —— /proc/meminfoMemTotal 就是 32G,dmesge820 显示那段区域标记为 reserved,但这段内存连 DMA、PCIe 设备都用不了,和 kdump 的 crashkernel 机制完全无关。

典型误用场景:

  • 想“给硬件留点内存”,却用了 mem=,结果网卡驱动报 dma_alloc_coherent failed
  • crashkernel= 同时使用,导致实际可用内存远低于预期(两者叠加裁剪)
  • mem= 值设得过大(如 mem=128G 在 64G 机器上)会被内核静默忽略,但日志里会有 warning

验证是否生效不能只看 /proc/meminfo

/proc/meminfoMemTotal 是扣除 crashkernel 后的可用内存,但它不体现预留区本身。真正确认方式是:

  • cat /sys/kernel/kexec_crash_size —— 输出非 0 即已分配(单位字节)
  • dmesg | grep -i "crash kernel" —— 应出现类似 Reserving 131072K of memory at 0x37b00000 for crashkernel
  • cat /proc/iomem | grep "Crash kernel" —— 显示该段物理地址范围,且状态为 reserved

如果 kexec_crash_size 为 0,但 iomem 里有 Crash kernel 条目,说明 kdump 服务没起来或未加载模块;如果两者都无,则 GRUB 配置或内核参数根本没生效。

本文转载于:https://www.php.cn/faq/2977533.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。

热门关注