[lkml]   [2012]   [Aug]   [15]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
Messages in this thread
SubjectRepeated fork() causes SLAB to grow without bound
I'm hoping someone has seen this before...

I've been trying to track down a performance problem with Linux 3.0.4.
The symptom is system-mode load increasing over time while user-mode
load remains constant while running a data ingest/processing program.

Looking at /proc/meminfo I noticed SUnreclaim increasing steadily.

Looking at /proc/slabinfo I noticed anon_vma and anon_vma_chain also
increasing steadily.

I was able to generate a simple test program that will cause this:


#include <unistd.h>

int main(int argc, char *argv[])
pid_t pid;

while (1) {
pid = fork();
if (pid == -1) {
/* error */
return 1;
if (pid) {
/* parent */
else {
/* child */
return 0;


In the actual program (running as a daemon), a child is reading data
while its parent is processing the previously read data. At any time
there are only a few processes in existence, with older processes
exiting and new processes being fork()ed. Killing the program frees
the slab usage.

I patched the kernel to 3.0.40, but the problem remains. I also
compiled with slab debugging and can see that the growth of anon_vma
and anon_vma_chain is due to anon_vma_clone/anon_vma_fork.

Is this a known issue? Is it fixed in a later release?


Daniel K. Forrest Space Science and Engineering Center
(608) 890 - 0558 University of Wisconsin, Madison

 \ /
  Last update: 2012-08-16 06:03    [W:0.124 / U:0.412 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site