Hi there,
I have a some problems figuring out the OOM-killer and configuring the overcommit_memory parameter. Hope someone here can guide me in the right directions...
Specs:
I'm having an embedded Linux system running on a PPC405EP with 64 megs of RAM, some flash, but _no_ swap space. It runs a 2.4.20 kernel patched with drivers for my device.
Problem:
I have an application that is killed by the OOM (I guess) when it tries to "use" more memory than present on the system.
Bolied down, memory is allocated with "sbrk" and then touch'ed.
With "/proc/sys/vm/overcommit_memory" set to 2, I expected that "sbrk" would return "-1" (0xFFFFFFFF), but it doesn't, hence is terminated/killed by the kernel.
The same happens on another embedded Linux/2.4.17/i386, also without swap.
However, both my desktop Linux/2.4.18/i386 and Linux/2.6.5/i386 _with_ swap does what I hoped:
# ./exhaust_mem ... ffffffff
Out of memory # #Yeaaaah!
Having searched the web, I see that this may be related with the fact that there is no swap enabled on either of my embedded devices.
Is this correct?
Can I do anything in order to get it the way I expected?
Best regards, Martin Egholm
=== exhaust_mem.c ===
#include <unistd.h> #include <stdio.h> #define SIZE 1000000
int main( int i ) { while ( 1 ) { char *v = sbrk( SIZE ); char *p;
printf( "%x\n\n", v );
if ((long)v < 0) { fprintf(stderr, "Out of memory\n"); exit(1); } // if
for (p = v; p < v + SIZE; ++p) { *p = 42; } // for
} // while } // main
-- Kernelnewbies: Help each other learn about the Linux kernel. Archive: http://mail.nl.linux.org/kernelnewbies/ FAQ: http://kernelnewbies.org/faq/