Home

openEuler 中可用内存与实际分配内存的差异原因分析

这篇文章记录一个很常见但也很容易让人疑惑的问题:在虚拟机分配相同物理内存的前提下,openEuler 系统里看到的可用内存,为什么会比 CentOS 更少。

环境信息

  • 产品:openEuler
  • 版本:24.03 LTS

问题现象

在相同虚拟机配置下,openEuler 显示出来的可用内存明显少于 CentOS。

复现结果

本地复现时,给两台虚拟机都分配 3G 内存:

  • CentOS 可用约 2.7G
  • openEuler 可用约 2.4G

这说明差异并不是偶发显示问题,而是系统启动阶段就已经预留掉了一部分内存。

原因定位

通过查看 dmesg,可以看到两边 crashkernel 的预留值存在差异。

也就是说,openEuler 在启动时为 kdump 或 crash dump 相关功能预留了更多内存,因此最终用户空间里看到的可用内存会更少。

处理思路

文中的处理方式,是把 grub 配置中的 crashkernel512M 调整为 256M

调整位置大致在:

/boot/grub2/grub.cfg

调整后,可用内存恢复正常。

注意事项

这里不能只看到“内存变多了”就直接下结论。crashkernel 预留空间本身是给故障转储机制准备的,改小之后虽然会释放出更多可用内存,但也可能影响后续故障转储能力。

所以在生产环境里,是否调整以及调到多大,应该先看你的场景:

  • 如果这台机器需要保留完整的故障转储能力,就不要为了多出几百 MB 内存随便缩
  • 如果是实验环境或资源紧张环境,可以根据实际需要评估是否下调

总结

同样分配 3G 内存,openEuler 比 CentOS 少出来的那部分,并不是“凭空消失了”,而是很可能被 crashkernel 预留机制拿走了。看到系统可用内存偏少时,优先检查内核启动参数,比盲目怀疑系统本身更有效。

技术分享