[Vienna-pm] perl und speicher freigeben

peter pilsl pilsl at goldfisch.at
Mon May 15 23:37:26 PDT 2006


Hmmm ... als Jongleur der schweren Daten hab ich zwar schon öfter mit 
solchen Problemen zu tun gehabt, aber diesesmal krieg ich es nicht auf 
die Reihe.

Ich hab ein langlaufendes Programm (ein daemon, der wochen laufen soll) 
und der nur ganz selten was zu tun hat. Dann aber muss es fleissig 
rechnen und braucht auch viel Speicher.
Mein Problem ist nun, dass perl diesen Speicher einfach nicht mehr an 
das Betriebssystem zurückgibt - auch nicht nach Stunden und auch nicht, 
wenn das Betriebssystem vor lauter swappen sonst nix mehr tun kann.

Ich hab das an einem kleinen Beispielprogramm illustriert:

-------------------memd_test.pl--------
use strict;
use warnings;
$|=1;

sub Run  {
   my @x;
   foreach (0..200000) {
push(@x,[33,44,55,66,77,88,99,22,11,33,44,55,66,77,88,99,22,11,33,44,55,66,77,88,99,22,11]);
   }
}
	
my $c;
while (<STDIN>) {
   print $c++;
   Run();
}
------------------------


Nach jeder Tasteneingabe wird Run() gestartet, dass ein grosses array 
erzeugt und dann aber eigentlich gleich wieder freigeben soll. Tut es 
aber nicht.  Wenn man mehrere dieser Prozesse startet  und jeweils 10 
mal enter drückt, dann sieht das im speicher so aus:

#top
  2461 root       9   0  122m 122m 1228 T  0.0  6.0   0:02.78    0 121m 
memd_test2.pl
  2492 root       9   0  122m 122m 1228 T  0.0  6.0   0:02.77    0 121m 
memd_test2.pl
  2564 root       9   0  122m 122m 1228 T  0.0  6.0   0:00.98    0 121m 
memd_test2.pl
  2570 root       9   0  122m 122m 1228 T  0.0  6.0   0:01.87    0 121m 
memd_test2.pl


jeder prozess braucht 122mb und gibt sie nie wieder her,obwohl er sie 
während dem warten gar nicht braucht.  das ist böse !! ;)


Fällt jemanden hier was ein dazu?

Das Programm muss als daemon laufen, weil es erstens eine sehr lange 
startzeit hat (einlesen und initialisieren von daten) und zweitens 
fallweise auch mal viele Anfragen parallel reinkommen.


ich sehe das problem unter perl 5.8.5 auf linux 2.4. und 5.8.7 auf linux 
2.6.


danke
lgp





-- 
mag. peter pilsl
goldfisch.at
IT- & dataconsulting
tel: +43 650 3574035
tel: +43 1 8900602
fax: +43 1 8900602 15
pilsl at goldfisch.at


More information about the Vienna-pm mailing list