Calculate used, free and cached RAM percentages from free command output values.
A common misreading of `free -h` treats MemFree as the true measure of available memory, but that column excludes reclaimable page cache and buffers — memory that's technically 'in use' but instantly reclaimable if an application needs it. MemAvailable (introduced in kernel 3.14, exposed in /proc/meminfo) is the kernel's own best estimate of how much memory could actually be allocated to new processes without swapping, and is the number you should compare against thresholds for out-of-memory risk.
Realistic used memory
used = MemTotal − MemAvailable
Because MemFree only counts memory not being used for anything at all, while Linux deliberately fills spare RAM with page cache to speed up file access. The 'available' column is what you should look at instead — it already subtracts out the memory the kernel considers instantly reclaimable.
Buffers holds raw block-device I/O buffers (metadata-level caching close to the storage layer), while Cached holds page cache for file contents read through the filesystem. Both are reclaimable under memory pressure and both count toward MemAvailable.
Not if it's mostly cache — high 'used + cached' with low 'used (realistic)' and healthy MemAvailable is normal and even desirable, since it means the kernel is using otherwise-idle RAM productively. The actual concern is when MemAvailable itself gets low and the system starts swapping or invoking the OOM killer.