使用free命令查看弹性云服务器的内存,为什么与实际不符?
问题描述
弹性云服务器创建成功后,使用free -m命令查询内存大小,查询结果与实际配置不符,较之创建时的配置要小一些。
示例:
假设创建该弹性云服务器时,配置的实际内存大小为4194304KB(即4096MB)。创建完成后,使用free -m命令查询内存大小,回显如下:
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 3790 167 3474 8 147 3414 Swap: 1022 0 1022
可以看到内存只有3790MB,小于实际的4096MB。
但是使用dmidecode -t memory命令查看实际的硬件内存大小时,回显如下:
[root@localhost ~]# dmidecode -t memory # dmidecode 3.0 Getting SMBIOS data from sysfs. SMBIOS 2.8 present. Handle 0x1000, DMI type 16, 23 bytes Physical Memory Array Location: Other Use: System Memory Error Correction Type: Multi-bit ECC Maximum Capacity: 4 GB Error Information Handle: Not Provided Number Of Devices: 1 Handle 0x1100, DMI type 17, 40 bytes Memory Device Array Handle: 0x1000 Error Information Handle: Not Provided Total Width: Unknown Data Width: Unknown Size: 4096 MB Form Factor: DIMM Set: None Locator: DIMM 0 Bank Locator: Not Specified Type: RAM Type Detail: Other Speed: Unknown Manufacturer: QEMU Serial Number: Not Specified Asset Tag: Not Specified Part Number: Not Specified Rank: Unknown Configured Clock Speed: Unknown Minimum Voltage: Unknown Maximum Voltage: Unknown Configured Voltage: Unknown
可以看到使用dmidecode -t memory查看的内存大小与实际配置一致。
问题原因
首先,系统启动时会初始化相关设备,该过程会占用内存,内核启动时,也会占用一部分的内存。其中,kdump占用的内存是可以自行设置的,如无特殊要求,请勿自行修改kdump占用的内存大小。
其次,free -m命令查询的是弹性云服务器的可用内存,dmidecode -t memory命令查询的是实际硬件内存大小。
对于采用QingTian虚拟化类型的规格(例如C7),因其基于全卸载架构,相比于KVM虚拟化类型的规格,还需要从虚拟机内存中分配一部分内存用于实现客户设备功能以及加速,例如页表管理、IO缓存等。
因此,使用free -m命令查询到的内存大小比实际的要小一些,属于正常情况,非问题。
物理机同样存在该问题。