lkml.org 
[lkml]   [2001]   [Nov]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    Subjectbuffer/memory strangeness in 2.4.16
    Date
    Hi,

    I am experiencing a bit of strange system behaviour in a vanilla 2.4.16
    kernel (2.95.3, very stable machine etc.)

    I noticed, that after running for a while (day) I had significantly less
    memory available for my simulation program than right after booting. Looking
    at the problem using 'xosview' (or 'free'), I noticed that there was a large
    number of MBs filled with 'buffers' that did not get wiped when other
    programs need the memory. The system seems to rather kill an 'offender' than
    clean out buffers.

    Right after booting, I can allocate about 650MBs memory using the little
    program attached below. After a day (or after running updatedb), under the
    same conditions, even in single user mode with only a shell running (!) this
    is not possible anymore and the program (below), trying to allocate only
    300-400MBs, gets killed by the system after making it unresponsive for many
    seconds.

    Apparently this problem occurs after running 'updatedb', which fills 'free
    memory' and generates lots of filled cache and buffers on my system.

    This sort of behaviour must have been introduced after 2.4.13, which does not
    show these problems.

    Please tell me if somebody needs more information to debug this, or if this
    behaviour is normal or expected. Please cc: me as I am only on lkml-digest.

    Cheers
    Jan


    P.S. All RAM slots are full, so please don't suggest buying more memory as a
    solution :^)

    -------------------%<-----------------------

    #include <stdio.h>
    #define ONE_MEG 1024 * 1024

    main ()
    {
    long mem_avail = ONE_MEG;
    char *buf;
    char userchar = '@';
    int howmany;

    while (1)
    {
    printf ("Number of MBs to allocate? ");
    scanf ("%d", &howmany);
    printf ("Trying to allocate %ld bytes: ", mem_avail*howmany);

    getchar ();
    if ((buf = (char *) malloc ((size_t) mem_avail*howmany))){
    printf (" success!\n");
    printf ("Now filling it up...\n");
    memset (buf, userchar, mem_avail * howmany);
    printf ("Hit ENTER to free the memory.\n");
    getchar ();
    free (buf);
    } else {
    printf (" failed :(\n");
    }
    }
    }

    -------------------%<-----------------------
    -
    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/

    \
     
     \ /
      Last update: 2005-03-22 13:13    [W:3.273 / U:0.008 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site