Checking Memory usage using free command

Linux uses it's memory in a very efficient way . Here I am not going to write on memory management in Linux , but would try to understand how to view the memory usage in a Linux box. Linux will always try to use free RAM for caching stuff, so "free" will report almost always very low free memory . We have the free command as a reporting tool for memory usage . Let us now look at the output of free command .

-bash-3.00$ free -m
                     total        used        free     shared     buffers     cached
Mem:           2007       1902        105          0          150           761
-/+ buffers/cache:        990       1016
Swap:         1963          0       1963

Initially was having the understanding that the free column in the above output gives me the free memory in my box and my box is really low in memory. But this is not exactly the case. We will see how .

Interpreting output of free Command:

Let's now understand the headers from the output of the above command.

Total: The total amount of RAM on the system minus the amount has been used in loading the kernel.
Used: The amount of memory used by applications in the system . This does not mean that all these
           memory are used by the current running applications in the system but this also includes
           memory reserved for caching and buffering purpose.
Free : The amount of free memory in the system .
Shared : This is the  shared memory . An indication of how much memory is common to more than
              one process.
Buffers: This entry indicates how much of the memory in use is currently being used for disk
              buffering. File system metadata and other block reads are cached in the buffer cache.
Cached: This entry indicates how much of the memory in use is currently being used for caching
              purpose. Applications which are not running but was running few minutes back is cached in
              memory with the idea that it will make the application running faster when it runs again. This
              memory can be reclaimed .
-/+ buffers/cache: This shows the cached data and buffers for IO.  The free section actually gives us
                             how much memory is available for use on the system. Caches will be freed
                             automatically if memory gets scarce, so they do not really matter.

Now let us see how we can calculate these values provided by the free command for the above output .

Buffers + Cache  =  150 + 761 =  911

Used - Buffers - Cache = 1902 - 911 = 991 

The lower value gives us the actual amount of memory used by the applications . This value is equal to the first row in the second column.  Rest of the used memory will be released by the OS if memory becomes scarce.

Buffers + Cache + free =  911 + 105 = 1016

The above value is the actual amount of memory that can be allocated to the  applications by the OS depending on usage. This value is equal to the free column in the second row . We should began to worry when this value is low. The OS will start paging after that and hence system performance will be impacted because disk is many times slow than memory.


Popular posts from this blog

PSSH : Parallel SSH to execute commands on a number of hosts

How to add check_http as a service in Nagios Monitoring using NRPE

Configuring Nagios to monitor services using NRPE