openEuler 中可用内存与实际分配内存的差异原因分析
这篇文章记录一个很常见但也很容易让人疑惑的问题:在虚拟机分配相同物理内存的前提下,openEuler 系统里看到的可用内存,为什么会比 CentOS 更少。
环境信息
- 产品:openEuler
- 版本:24.03 LTS
问题现象
在相同虚拟机配置下,openEuler 显示出来的可用内存明显少于 CentOS。




复现结果
本地复现时,给两台虚拟机都分配 3G 内存:
- CentOS 可用约
2.7G - openEuler 可用约
2.4G
这说明差异并不是偶发显示问题,而是系统启动阶段就已经预留掉了一部分内存。
原因定位
通过查看 dmesg,可以看到两边 crashkernel 的预留值存在差异。
也就是说,openEuler 在启动时为 kdump 或 crash dump 相关功能预留了更多内存,因此最终用户空间里看到的可用内存会更少。
处理思路
文中的处理方式,是把 grub 配置中的 crashkernel 从 512M 调整为 256M。
调整位置大致在:
/boot/grub2/grub.cfg调整后,可用内存恢复正常。
注意事项
这里不能只看到“内存变多了”就直接下结论。crashkernel 预留空间本身是给故障转储机制准备的,改小之后虽然会释放出更多可用内存,但也可能影响后续故障转储能力。
所以在生产环境里,是否调整以及调到多大,应该先看你的场景:
- 如果这台机器需要保留完整的故障转储能力,就不要为了多出几百 MB 内存随便缩
- 如果是实验环境或资源紧张环境,可以根据实际需要评估是否下调
总结
同样分配 3G 内存,openEuler 比 CentOS 少出来的那部分,并不是“凭空消失了”,而是很可能被 crashkernel 预留机制拿走了。看到系统可用内存偏少时,优先检查内核启动参数,比盲目怀疑系统本身更有效。