[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