EN 联系我们加入我们
典型案例
您现在的位置:首页 > 典型案例
【案例分享】Linux虚拟机内存扩容识别问题处理



某客户对一套VMware上的Linux主机进行内存扩容,但在VMware端操作完成后,系统内无法完整识别新增加的内存,容量缺失一部分。

Client版本:redhat7.6



一、故障描述



一台redhat7.6客户机因业务需要,对原有内存进行扩容,在VMware端扩容后内存容量增加至128G:

image001.png



但是在redhat系统内查询到的内存容量不足128G:

image002.png



二、故障分析



要处理这个问题,我们就要了解Linux系统是如何做到实现内存热插拔的。

内存热插拔在这里分成了两个阶段:

1、物理内存热插拔阶段

2、逻辑内存热插拔阶段

在本次问题处理中,相对于Linux操作系统来说,物理内存热插拔阶段由VMware和内核来共同完成,这里不做详细说明,主要关注逻辑内存的热插拔阶段。

逻辑热插拔状态主要是完成内存状态的改变,以完成系统内新增内存容量的可用性。

在系统中,内存被划分为大小相同的块,块的大小由/sys/devices/system/memory/block_size_bytes 来指定。所有的内存按照块的大小被划分成多个文件,以 /sys/devices/system/memory/memoryXXX 的形式存放,而逻辑内存热插拔就是通过对这些块文件进行online/offline操作来实现的。



三、故障处理



1、依据上述原理,首先查看/sys/devices/system/memory/block_size_bytes确定内存块大小为1G:

(图中40000000即为内存块的大小,以16进制表示,换算后为1G)

image003.png



2、使用命令grep line /sys/devices/system/memory/*/state查看内存块的online状况,确认128个内存块中有部分内存块状态为offline,导致系统中无法正常识别到完整容量:

image004.png



3、使用

echo online >/sys/devices/system/memory/memory[number]/state

对相应的offline内存块进行上线操作,完成后内存容量恢复正常。



四、经验总结



1、此次故障因为涉及到虚拟化,看起来问题相对复杂,涉及到VMware,redhat,物理内存三个层面的内容,但是只要仔细分析排查即可发现,物理内存方面容量充足,虚拟化部分和内核的对接正常,问题不出现在这两部分,只需要对操作系统内的内存操作进行分析检查,定位到相应的文件配置,进行适当的修改操作,即可顺利解决。

2、Linux中众所周知一句话“万物基于文件”,Linux世界中一切东西都可以通过文件的方式访问、管理。本次案例中,Linux操作系统中就是以文件形式对逻辑内存块进行管理,以达到物理内存调用管理。因为操作系统中内存块状态为offline,导致VMware分配内存后,无法达到预期的扩容效果,需要修改一定参数方能进行识别。


如欲了解更多,请登录安图特官方网站:www.antute.com.cn

版权所有 安图特(北京)科技有限公司 备案号:京ICP备17074963号-1
技术支持:创世网络