Buffers and Cached memory in free
command.
Explaining
the free command outputs:
total: Yes, this is total ram.
used: This is probably the most confused column.
This is a mix of application used memory and other 'temporarily' (buffer +
cache) used memory that is actually available if needed. So technically the
memory is truly being used, but much of this memory is available if an
application needs it. The 'temporarily' used memory is borrowed if available by
the linux system to help speed up system performance, otherwise the system
would have read from disk more often. Much of this type of memory is shown
under the 'cached' column. This memory is given up by the linux system if an
application need memory.
free: Yes, this pure free and untouched memory.
shared: Memory specifically allocated for use by
multiple processes
buffers: Temporary memory that is set aside to help
some processes
cache: Memory that is available and 'borrowed' by
the operating system to help speed up many linux OS operations. This memory is
given up by the system if an application need it.
The difference between
the first and the second rows is that the first is row is does not count caches
and buffers under the free column,
while the second one does. Here is an example:
total used free
shared buffers cached
[1] Mem:
4028712 2972388 1056324 0
315056 835360
[2] -/+ buffers/cache: 1821972
2206740
used[2] =
used[1] - buffers - cached
free[2] =
free[1] + buffers + cached
The first line means:
·
total: Your total (physical) RAM (excluding a small
bit that the kernel permanently reserves for itself at startup); that's why it
shows ca. 11.7 GiB , and not 12 GiB, which you probably have.
·
used: memory in use by the OS.
·
free: memory not in use.
total = used + free
·
shared / buffers / cached: This shows memory usage for specific
purposes, these values are included in the value for used.
The second line gives
first line values adjusted. It gives the original value for used minus the sum buffers+cached and the original value for free plus the sum buffers+cached, hence its title. These new values are often more meaningful
than those of first line.
The last line (Swap:) gives information about swap space usage (i.e. memory contents
that have been temporarily moved to disk).
To actually understand
what the numbers mean, you need a bit of background about the virtual memory
(VM) subsystem in Linux. Just a short version: Linux (like most modern OS) will
always try to use free RAM for caching stuff, so Mem: free will almost always be very low. Therefore the line -/+ buffers/cache: is shown, because it shows how much
memory is free when ignoring caches; caches will be freed automatically if
memory gets scarce, so they do not really matter.
A Linux system is
really low on memory if the free value in -/+ buffers/cache: line gets low.
What is the difference between
something that is buffered vs. cached?
A buffer is something that
has yet to be "written" to disk. A cache is something that has been
"read" from the disk and stored for later use.