63

The output of free -m is:

                     total    used    free    shared  buffers  cached
Mem:                  595      482     112         0       63     324
-/+ buffers/cache:              93     501
swap:                   0        0       0

Which value of used memory is correct, 482 or 93?

4 Answers 4

46

You have 112 MB of completely free memory, BUT the 501 mb you see is without 'cached' memory. This means that the OS has put some stuff in your memory to be quicker. It calls this "used" (therefore your 'free' number is only 112), but it is actually available for you if you need it.

This is a good thing, because unused memory is useless memory. The cached memory can be cleared if needed. The old "I need to clean up memory" stuff people used to do for windows 95 isn't needed here: it's all fine and happy :)

The number you are looking for is 501 free (in megabytes because of -m).

see for reference these pages:

http://www.linuxatemyram.com/
http://www.itworld.com/it-managementstrategy/280695/making-sense-memory-usage-linux

1
  • 1
    Bascially: "just look at the second line, the one with the buffers/cache".
    – Nanne
    Nov 30, 2012 at 9:55
31

Interpretting output of free:
The first line of the free output lists:

  • total Your total, physical (assuming no virtualization) memory
  • used How much of that is currently used (by anything)
  • free How much of that is completely free (not used at all)
  • shared (never anything there, ignore that column)
  • buffers Memory used by kernel buffers
  • cached Memory used for cache

The last two items, cache and buffers, is memory that is not allocated to specific user processes. It is memory reserved by the kernel to improve performance overall, but is not "application" memory. These areas will grow or shrink depending on kernel policies with respect to caching, memory pressure, application I/O patterns, etc.

Since these two columns are not user-allocated memory, and the zones can shrink (practically to zero) if user allocations require it, they are in a sense "free" - there's RAM there that can be freed up by the kernel if your apps actively need it.

That's what the second line tells you. It removes the buffer and cache memory from the used column (that's what the - means), and adds (+) them to the free column. (Rounding issue will happen.)

(The last line shows the state of your swap space.)

Courtesy: https://unix.stackexchange.com/a/33549/14497

So, in your case 112MB is the completely free memory, and if you take into consideration the memory used for caching, which can be allocated to the user applications, if needed; then 501 MB is the actual maximum memory available for use.

4
  • A person looking for a readout of memory is never interested (or almost never) in how much memory is completely free, but how much is free to use. the cached memory is 'in use' but is also free to use, so you should look at that.
    – Nanne
    Nov 30, 2012 at 9:51
  • I'm not really sure why you say that? It seems to imply that someone would deliberatly remove cache (which is indeed a bad thing)? The point is that loading acuall stuff (like a program you want to use) into that memory is actually an option. You want that 112 number to be as low as possible, but that would mean in your theory that you can't open any programs. Not the goal i'd say. Also: that cache isn't just disc-cache, it's also system cache and the likes
    – Nanne
    Nov 30, 2012 at 10:09
  • @Nanne, Ok. I agree man. Thanks for the correction. I have updated my answer to reflect the same.
    – saji89
    Nov 30, 2012 at 10:20
  • ##### THANK YOU ALL @ Nanne @devav2 @ saji89 FOR SHARING KNOWLEDGE - YOU ARE AWESOME #####
    – amoooc
    Dec 6, 2012 at 17:30
15

The answer by @saji89 is excellent, but these days free -m no longer prints the -/+ buffers/cache line, but instead puts the amount of available RAM in a new available column on the first line, for example:

ubuntu@pg_master:~$ free -m
              total        used        free      shared  buff/cache   available
Mem:          61406        1571         506       17131       59328       42150
Swap:             0           0           0
ubuntu@pg_master:~$ free -V
free from procps-ng 3.3.10

You can read the commit to free(1) that removed the line in their repo. Also the commit to add the new available column.

1
  • Thanks. Can you add how interpret the remaining columns? Because when I see shared+cache>total I don't know how to use anything except available and total. I know from experience that when available approaches zero system stalls, but I'd like to get more from free. Dec 24, 2021 at 10:35
4

free command shows the information about unused and used memory and swap space.

Below is the explanation provided by http://www.linfo.org/free.html

The first row, labeled Mem, displays physical memory utilization, including the amount of memory allocated to buffers and caches. A buffer, also called buffer memory, is usually defined as a portion of memory that is set aside as a temporary holding place for data that is being sent to or received from an external device, such as a HDD, keyboard, printer or network.

The second line of data, which begins with -/+ buffers/cache, shows the amount of physical memory currently devoted to system buffer cache. This is particularly meaningful with regard to application programs, as all data accessed from files on the system that are performed through the use of read() and write() system calls1 pass through this cache. This cache can greatly speed up access to data by reducing or eliminating the need to read from or write to the HDD or other disk.

The third row, which begins with Swap, shows the total swap space as well as how much of it is currently in use and how much is still available.

Lets analyse the your system's memory usage

You have used free command with '-m' option, which is used to display the result in megabytes

-m, --mega
              Display the amount of memory in megabytes.

Total memory is 595(Used+free)

Used: 482 Free: 112

482MB out of 595MB is used by your system, in which only 93MB is used by active programs and remaining 324MB are in cache

So when you run any program in future, say which requires more 120MB. All 112MB(currently free) will be given and remaining 8MB will be taken from the non-active program buffer/cache.

Edit: Found this link, which provides good explanation.

5
  • I don't think this is correct. If you discard cache you have 93mb used so you have 501 left.
    – Nanne
    Nov 30, 2012 at 9:54
  • Why do you think it is not correct. Free memory on OP system is 112MB + 324MB(which is cached). So when a new program starts it will use 112MB first and then the cache.
    – devav2
    Nov 30, 2012 at 10:15
  • basically, because 595-93=501 and(give or take 1mb for rounding), and it kinda reads as if 112 is the number you think the op is looking for.
    – Nanne
    Nov 30, 2012 at 11:15
  • 501 is correct and that is what I am trying to explain. Out of 595, 482 is used. In which only 93 is the active memory used by programs. So 112 is the free available + if needed more, the memory can be taken from the cache, which was previously used and currently not active.
    – devav2
    Nov 30, 2012 at 11:32
  • ok, agree then :)
    – Nanne
    Nov 30, 2012 at 11:53

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .