Por que a memória de um ECS obtido por meio da execução do comando free é inconsistente com a memória real?
Sintoma
Depois de criar um ECS, execute o comando free -m para exibir a memória do ECS. A memória do ECS é menor do que a memória configurada durante a criação do ECS.
Por exemplo:
Quando você está criando um ECS, o tamanho da memória configurada é 4194304 KB (4096 MB). Depois que o ECS é criado, execute o comando free -m para ver sua memória. A saída do comando é a seguinte:
[root@localhost ~]# free -m total used free shared buff/cache available Mem: 3790 167 3474 8 147 3414 Swap: 1022 0 1022
A memória na saída do comando é 3790 MB, que é menor que os 4096 MB configurados.
Execute o comando dmidecode -t memory para verificar a memória real configurada para o ECS. A saída do comando é a seguinte:
[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
A memória na saída do comando é a mesma configurada durante a criação do ECS.
Possíveis causas
Quando o SO é iniciado, os dispositivos relacionados são inicializados, o que ocupa memória. Além disso, quando o kernel é iniciado, ele também ocupa memória. A memória ocupada pelo kdump pode ser definida. A menos que especificado de outra forma, não altere o tamanho da memória ocupada pelo kdump.
A saída do comando free -m mostra a memória disponível do ECS, e a de dmidecode -t memory mostra a memória do hardware.
Portanto, a memória obtida executando o comando free -m é menor que a memória configurada para o ECS. Este é um fenômeno normal.

Este é um fenômeno normal mesmo para servidores físicos.