Controlling the garbage collector (GC) at RT?

Martin Egholm Nielsen martin@egholm-nielsen.dk
Mon Feb 14 10:59:00 GMT 2005


Hi Hans and Chris (and whomever),

>>It would indeed be interesting to know why the Linux kernel kills
>>the application rather than returning failure.
> According to 'man malloc' on a linux box (Debian 3.1):
> BUGS
>        By default, Linux follows an  optimistic  memory  allocation  strategy.
>        This  means  that  when malloc() returns non-NULL there is no guarantee
>        that the memory really is available. This is a really bad bug.  In case
>        it  turns  out  that the system is out of memory, one or more processes
>        will be killed by the infamous OOM killer.  In case Linux  is  employed
>        under  circumstances  where it would be less desirable to suddenly lose
>        some randomly picked processes, and moreover the kernel version is suf-
>        ficiently recent, one can switch off this overcommitting behavior using
>        a command like
>               # echo 2 > /proc/sys/vm/overcommit_memory
>        See also  the  kernel  Documentation  directory,  files  vm/overcommit-
>        accounting and sysctl/vm.txt.
> The man page is dated 1993-04-04, but I have also seen man pages dated "April 
> 4, 1993" which have a completely different text. So it's not easy to 
> determine what kernel/glibc version is required - experiment and see.
There certainly is a difference in behaviour - however, none of which 
does the "correct".

Hans, you asked for the output. Below here it is - depending on the 
"overcommit"-strategy chosen. There is obviously difference in 
behaviour, between the default (0) and either 1 or 2, but the 
application is still terminated.
(The application just allocates and stores additional 10000 bytes 
forever until terminated.)

===================
=== 0 (default) ===
===================
# echo 0 > /proc/sys/vm/overcommit_memory
# ./mem3
*** MEM CHUNK TAKEN: 98304
*** MEM CHUNK TAKEN: 131072
*** MEM CHUNK TAKEN: 176128
*** MEM CHUNK TAKEN: 233472
*** MEM CHUNK TAKEN: 311296
*** MEM CHUNK TAKEN: 417792
*** MEM CHUNK TAKEN: 557056
*** MEM CHUNK TAKEN: 741376
*** MEM CHUNK TAKEN: 987136
*** MEM CHUNK TAKEN: 1318912
*** MEM CHUNK TAKEN: 1757184
*** MEM CHUNK TAKEN: 2342912
*** MEM CHUNK TAKEN: 3125248
*** MEM CHUNK TAKEN: 4165632
*** MEM CHUNK TAKEN: 5554176
*** MEM CHUNK TAKEN: 7405568
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 65536
*** MEM CHUNK TAKEN: 65536
=== last message repeated 20-30 times ===
Terminated

Kernel messages:
Out of Memory: Killed process 92 (mem3).
Out of Memory: Killed process 93 (mem3).
Out of Memory: Killed process 94 (mem3).

=========
=== 1 ===
=========
# echo 1 > /proc/sys/vm/overcommit_memory
# ./mem3
*** MEM CHUNK TAKEN: 98304
*** MEM CHUNK TAKEN: 131072
*** MEM CHUNK TAKEN: 176128
*** MEM CHUNK TAKEN: 233472
*** MEM CHUNK TAKEN: 311296
*** MEM CHUNK TAKEN: 417792
*** MEM CHUNK TAKEN: 557056
*** MEM CHUNK TAKEN: 741376
*** MEM CHUNK TAKEN: 987136
*** MEM CHUNK TAKEN: 1318912
*** MEM CHUNK TAKEN: 1757184
*** MEM CHUNK TAKEN: 2342912
*** MEM CHUNK TAKEN: 3125248
*** MEM CHUNK TAKEN: 4165632
*** MEM CHUNK TAKEN: 5554176
*** MEM CHUNK TAKEN: 7405568
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
Terminated
#

Out of Memory: Killed process 128 (mem3).
Out of Memory: Killed process 129 (mem3).
Out of Memory: Killed process 130 (mem3).

=========
=== 2 ===
=========
# echo 2 > /proc/sys/vm/overcommit_memory
# ./mem3
*** MEM CHUNK TAKEN: 98304
*** MEM CHUNK TAKEN: 131072
*** MEM CHUNK TAKEN: 176128
*** MEM CHUNK TAKEN: 233472
*** MEM CHUNK TAKEN: 311296
*** MEM CHUNK TAKEN: 417792
*** MEM CHUNK TAKEN: 557056
*** MEM CHUNK TAKEN: 741376
*** MEM CHUNK TAKEN: 987136
*** MEM CHUNK TAKEN: 1318912
*** MEM CHUNK TAKEN: 1757184
*** MEM CHUNK TAKEN: 2342912
*** MEM CHUNK TAKEN: 3125248
*** MEM CHUNK TAKEN: 4165632
*** MEM CHUNK TAKEN: 5554176
*** MEM CHUNK TAKEN: 7405568
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
*** MEM CHUNK TAKEN: 8388608
Terminated
#

Out of Memory: Killed process 132 (mem3).
Out of Memory: Killed process 133 (mem3).
Out of Memory: Killed process 134 (mem3).




More information about the Java mailing list