As with kernel space, the different ways of allocating, mapping and sharing user space memory make it quite difficult to answer this seemingly simple question.
To begin with, you can ask the kernel how much memory it thinks is available, which you can do by using the free
command. Here is a typical example of the output:
total used free shared buffers cached Mem: 509016 504312 4704 0 26456 363860 -/+ buffers/cache: 113996 395020 Swap: 0 0 0
At first sight, this looks like a system that is almost out of memory with only 4704 KiB free out of 509,016 KiB: less than 1%. However, note that 26,456 KiB is in buffers and a whopping 363,860 KiB is in cache. Linux believes that free memory is wasted memory and so the kernel uses free memory for buffers and caches, in the knowledge that they can be shrunk when the need arises. Removing buffers and cache from the measurement gives the true free memory, which is 395,020 KiB; 77% of the total. When using free, the numbers on the second line marked -/+ buffers/cache
are the important ones.
You can force the kernel to free up caches by writing a number between 1 and 3 to /proc/sys/vm/drop_caches
:
# echo 3 > /proc/sys/vm/drop_caches
The number is actually a bit mask which determines which of the two broad types of cache you want to free: 1 for the page cache and 2 for the dentry and inode caches combined. The exact roles of those caches is not particularly important here, only that there is memory that the kernel is using but which can be reclaimed at short notice.