Команда free показывает количество памяти доступное пользователю для запуска программ. Это значение обычно меньше, чем фактически у вас на сервере.
# free -h
total used free shared buff/cache available
Mem: 2.9Gi 633Mi 687Mi 3.5Mi 1.8Gi 2.3Gi
Так происходит, потому что ядро Linux резервирует нужный процент памяти для работы самого себя, процент зависит от размера ядра и его модулей.
Правильно будет смотреть количество памяти через команду dmidecode:
# dmidecode -t memory
# dmidecode 3.4
Getting SMBIOS data from sysfs.
SMBIOS 2.8 present.
Handle 0x1000, DMI type 16, 23 bytes
Physical Memory Array
Maximum Capacity: 3 GB
Handle 0x1100, DMI type 17, 40 bytes
Memory Device
Size: 3 GB