2008-11-17 8 views

Antwort

13

Alle Lecks im Perl-Programmspeicher sind entweder ein XS, das eine Referenz enthält, oder eine kreisförmige Datenstruktur. Devel::Cycle ist ein großartiges Werkzeug zum Finden von Zirkelverweisen, wenn Sie wissen, welche Strukturen die Schleifen wahrscheinlich enthalten. Devel::Peek kann verwendet werden, um Objekte mit einer höheren als der erwarteten Referenzanzahl zu finden.

Wenn Sie nicht wissen, wo Sie sonst noch suchen können, könnte Devel::LeakTrace::Fast ein guter erster Platz sein, aber Sie werden ein Perl zum Debuggen benötigt.

Wenn Sie vermuten, dass das Leck im XS-Raum ist, ist es viel schwieriger, und Valgrind wird wahrscheinlich Ihre beste Wette sein. Test::Valgrind kann Ihnen dabei helfen, die Menge an Code zu reduzieren, die Sie suchen müssen, aber dies funktioniert nicht unter Windows, Sie müssten also (zumindest den undichten Teil) nach Linux portieren, um dies zu tun.

5

Devel::Gladiator zeigt Ihnen eine Liste der Variablen, die Perl zu einem bestimmten Zeitpunkt im Speicher hat, und auf was sie sich beziehen. Sehr nützlich, um herauszufinden, welche Art von Objekten erstellt, aber nicht freigegeben werden.

4

Da es noch nicht erwähnt wurde, meldet Devel::Size die Größe einer Datenstruktur. Es gibt keine weiteren Informationen und die Regeln, die zur Bestimmung der "Grenze" Ihrer Datenstruktur verwendet werden, sind undurchsichtig. Für einfache Strukturen ist das kein Problem.

Devel::SizeMe ist ein Hobby-Projekt von mir, das die Probleme von Devel :: Size lösen und Visualisierung der gesamten Speicherbelegung eines Perl-Interpreters ermöglichen soll. Weitere Informationen finden Sie unter my blog, einschließlich Links zu Screencasts und Videos. Eines meiner Ziele ist es, Leckagen zu erkennen und zu visualisieren, aber das ist noch ein weiter Weg.

Updates:

Zusätzlich zu den anderen Kommentaren, können Sie meine Perl Memory Use talk bei LPW2013 nützlich finden. Ich würde empfehlen, the screencast zu beobachten, wie es die Dias erklärt und einige nette Visuals und einige Q & A am Ende hat.

Ich würde auch vorschlagen, Paul Evans Devel::MAT Modul zu betrachten, die ich in der Diskussion erwähne.

Verwandte Themen