
# 使用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**命令查询到的内存大小比实际的要小一些，属于正常情况，非问题。
![](https://support.huaweicloud.com/ecs_faq/public_sys-resources/note_3.0-zh-cn.png)
物理机同样存在该问题。
