Overcommit (OOM) problem on embedded device with no swap

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/


[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux