SDB:Low amount of free memory

Şuraya atla: kullan, ara


Symptom

The amount of free memory reported by the free command is low; for example:

             total       used       free     shared    buffers     cached
Mem:       8092856    7136972     955884          0     124452    6642888
-/+ buffers/cache:     369632    7723224
Swap:      3020212          0    3020212

and you suspect this may cause problems when the system is put under additional load.

Background: memory hierarchy

Computer memory that functions at speeds close to a modern processors is very expensive. For economic reasons, in modern computing a memory hierarchy is used which ranges from very fast, but small memory (like cache chips) via slower but larger memory (like RAM chips) to much slower, but very large memory (like hard disks).

For these same economic reasons, it is important to try to keep data that the processor needs frequently (i.e. data that's part of the current system workload) "close to the processor", i.e. in as fast a form of memory as is possible. When the demand for memory increases and the system's RAM gets full,data that hasn't been used for a while can be moved to disk and retrieved back from there when needed. This is known as swapping. A low amount of swapping is acceptable for most uses, but when the system starts swapping a lot it slows down significantly and you should consider adding more RAM to it to restore performance.

Linux' use of RAM

Linux tries to use a system's RAM in a way that makes the most economical sense: when the processes running on the system don't need all the RAM, Linux puts the remaining RAM to use by holding copies of frequently and recently accessed files for faster access in it (so-called I/O cache and buffers); of course, changes are also safely written to disk.

In the example free output above, the system has 8 GB RAM; the running processes use less than 2 GB RAM, so the kernel has started to use most of the remaining memory (over 6 GB) as cache/buffer. Thus, this system's situation is quite fine and in fact the system isn't using swap space at all.

For a different example, consider this free -m output ("-m" to use megabytes as the unit):

             total       used       free     shared    buffers     cached
Mem:          2016       1963         53          0        143        490
-/+ buffers/cache:       1328        688
Swap:         2055        449       1605

On this system, the (relative) demand for memory is higher than in the earlier example: almost no RAM is really free and the amount in use for buffers and cache is smaller as well. The system has swapped out some data. Using vmstat one can see that the system is not swapping heavily currently:

procs -----------memory---------- ---swap-- -----io---- --system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in    cs us sy id wa
 2  0 460592  55012 147012 502596    1    2    16    15    5     9 13 20 66  2

(in fact, it's close to not swapping at all) so its performance is still quite acceptable. If additional memory load was put on this system, the buffers and cache would go down and in the end the free RAM would get close to zero and the system would start to do significant swapping.

Related tools

Aside from free and vmstat which are included in the base system's procps package, the tools in the sysstat package can be used to keep logs of the system's load over time. For instance, the sar command lists the percentage of time the CPU is waiting for I/O; on a system that's starting to swap, this percentage will go up.

The behaviour of the virtual memory subsystem of the Linux kernel (which is responsible for swapping) can be tuned through the /proc filesystem (see /proc/sys/vm/). This subject is beyond the scope of this article though.

Summary

Linux tries to make economically sensible use of a system's RAM. When the amount of free RAM as reported by free becomes low, this is not always a problem. Only when the "buffers" and "cached" values go down and the "swap used" value goes up, the system is really running out of RAM and adding more RAM to it should be considered.

Aside from free and vmstat, the tools in the sysstat package can be used to evaluate a system's memory load over time. <keyword>free,memory,RAM,lowmemory,swap,buffers,cache</keyword>