User since
2006-06-07
1
Artikel
BenutzerIn
Hallo,
ich habe ein Problem mit einem Perl-Script.
Das Script reserviert während seiner Laufzeit
immer mehr Speicher. Es scheint sich hierbei
um ein Memory leak zu handeln.
Da es sich um ein relativ
komplexes Script handelt, d.h.,
es werden verschiedene externe
Scripts und Klassen eingebunden,
ist es relativ schwierig, herauszubekommen
was diese steigende Speicherausnutzung
verursacht.
Meine Frage: Gibt es eine Möglichkeit unter Perl
sich anzeigen zu lassen, welche Variablen und Arrays
welchen Speicher belegen?
MfG. nemro
User since
2003-08-04
14371
Artikel
ModeratorIn
Mit
Devel::Size kannst Du Dir ausgeben lassen, welche Variable wieviel Speicher benötigt...
Edit:
Devel::Monitor scheint auch brauchbar zu sein...\n\n
<!--EDIT|renee|1149701454-->
User since
2003-11-28
3645
Artikel
ModeratorIn
Weiterhin in der Liga: Devel::Leak. Damit kann man feststellen, ob sich die Anzahl aller belegten Skalare vorher und nachher geändert hat.
Gerne benutze ich auch strace, um Memory-Leaks zu entdecken. Jeder Aufruf von "break" ist die Folge einer malloc-Anweisung.
Was tatsächlich fehlt, ist ein Snapshot eines laufenden Perl-Prozesses, also z.B. 10MB werden von Package A::B belegt etc. Aber vielleicht kann man mithilfe von Devel::Symdump und Devel::Size etwas dergleichen bauen, wenigstens für globale Symbole?
Vielleicht ist auch gar nicht Perl schuld? Letztens habe ich beim Memory-Leak-Suchen im ldirectord (ein Perl-Skript) des "Linux High Availablitity"-Systems entdeckt, dass libc von Debian einen Bug hat.