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/