Many utilities in Linux do not display the installed memory, but available for the system in fact. Why it happens? The answer lies in data reading methods. If the utility receives data from an accessible system, then that part of the memory, which is reserved by the Linux kernel, will not be taken. The kernel return thе information, subtracts what it reserves for itself. That's why the commands free -m, cat /proc/meminfo and many others do not show the total installed memory. And it does not matter whether it is virtual or dedicated server.
Then what method to find out exactly how much RAM is installed on the server? You can do it, for example, using the command dmidecode --type 17, or dmidecode --type memory, which will show the memory installed on the server in detail.
But on a virtual server, the same result will be on the output of the command lshw -c memory, but not on dedicated. These are the features of KVM virtualization..
dmidecode, as well lshw, display RAM accurately without rounding the number.