Re: 2.4.20-aa and LARGE Squid process -> SIGSEGV

From: J.A. Magallon (jamagallon@able.es)
Date: Fri Dec 20 2002 - 17:37:54 EST


On 2002.12.20 Ralf Hildebrandt wrote:
>Hi!
[real problem snipped]
>
>Then we wrote a program which allocates large amounts of memory:
>
>--- snip ---
>#include <stdlib.h>
>#include <stdio.h>
>
>main(){
> char *buf;
> long c;
> FILE *fp;
>
> fp = fopen("/dev/null","a");
> while(1){
> buf = (char *)malloc(100000000);
> c = random();
> if (c > 100000000)
> continue;
> fprintf(fp,"%c",buf[c]);
> printf("hier\n");
> }
>}
>--- snip ---
>
>And we found that this program will be killed with a SIGSEGV as well.
>

Normal. You are running OOM. Look at what you do:

    while (1)
    {
         malloc(much mem)
         // do not free the mem !!!!
    }

So in a couple steps you are OOM.

I suppose what you want to do is

    buf = malloc(...)
    while (1)
        touch random page

But...you 'touch' is read-only (the printf), so the page will never
really be allocated. Try with this:

#include <stdlib.h>

// 4Gb
#define SZ 4*1024*1024*1024

main(){
    char *buf;

    buf = malloc(SZ);
    if (!buf)
    {
        perror("bad try");
        exit(1);
    }
    while(1){
        buf[random()%SZ] = 0;
    }
}

Ah, with 2Gb of ram you will need to compile with 3Gb userspace,
to let a one only process allocate a chunk of mem that does not fit
into core memory. Or, easier, run several instances...

-- 
J.A. Magallon <jamagallon@able.es>      \                 Software is like sex:
werewolf.able.es                         \           It's better when it's free
Mandrake Linux release 9.1 (Cooker) for i586
Linux 2.4.20-jam2 (gcc 3.2 (Mandrake Linux 9.1 3.2-4mdk))
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Mon Dec 23 2002 - 22:00:28 EST