kernel leaking memory somewhere
Matthew Dillon
dillon at apollo.backplane.com
Wed Dec 16 10:05:59 PST 2009
You aren't using any swap space, so you probably aren't running out
of memory.
Remember that UNIX (BSD, Linux) systems in general use all available
memory as a disk cache. That's basically all that is happening here.
There's really no concept of 'free' memory per-say... the cache and
free values you see in the vmstat (or systat -vm 1) output are only used
for short term memory cycling, e.g. when a program runs, eats some
memory, and then exits.
For all of these systems paging to swap is governed by the concept
of memory pressure rather than memory use (since all of memory is 'used'
one can't go by memory use). Memory pressure is produced when the
set of running programs on the system try to use more memory in
aggregate then is actually available, or at least enough memory that
the kernel feels it cannot maintain a large enough disk cache. The
kernel will then start paging to swap to try to clean up memory use.
You can force this as a test you can compile up a little program
called eatmem.c in /usr/src/test/stress/eatmem.c. This program
allocates a ton of memory (specified in megabytes on the command line)
and then touches it in a loop. You can use it to force the kernel
to page stuff out :-). Then kill it and observe how well the system
recovers. Be careful that you do not actually run your system out
of memory + swap space or it will start killing things.
-Matt
More information about the Kernel
mailing list