Ich verwende ActiveState Perl 5.6 auf einem Windows 2003 Server und habe einige Speicherprobleme. Gibt es irgendwelche guten Werkzeuge (oder sogar schlechte Werkzeuge, die einen Hinweis geben), die ich verwenden könnte, um sie zu finden?Gibt es irgendwelche Tools zum Finden von Speicherlecks in meinem Perl-Programm?
Antwort
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.
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.
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.
- 1. Gibt es irgendwelche Tools zum Parsen von HTML mit GWT
- 2. Tools zum Debugging von Speicherlecks in JavaScript
- 3. Gibt es irgendwelche XSL Lint Tools?
- 4. Gibt es irgendwelche kostenlosen Tools zum Generieren von 'INSERT INTO' Skripten in MS SQL Server?
- 5. Gibt es irgendwelche guten Werkzeuge zum Untersuchen von Makefiles?
- 6. Kostenlose Tools zum Identifizieren von Speicherlecks in .Net-Anwendung
- 7. Tools zum Finden von Solr-Performance-Problemen
- 8. Wie erkenne ich Speicherlecks in meinem Webportal?
- 9. Welche Tools gibt es zum Testen von Multithread-.NET-Code?
- 10. Wie kann ich Speicherlecks in meinem Python-Programm finden?
- 11. Gibt es Tools zum automatischen Aktualisieren von Javadoc?
- 12. gibt es irgendwelche XDebug Alternativen zum Debuggen von PHP?
- 13. Gibt es Code-DRYer-Tools?
- 14. Qt: Finden von Speicherlecks und Fehlern
- 15. Gibt es Online-Tools zum Testen von SVG-Pfaden?
- 16. Gibt es Speicherlecks in diesem Code?
- 17. Gibt es "intelligente"/kontextsensitive Tools zum Vergleichen/Zusammenführen?
- 18. Gibt es irgendwelche unbenutzten Symbole in Python?
- 19. Gibt es irgendwelche guten Ruby-Konsolen-Anwendungen?
- 20. Gibt es irgendwelche Tools, um die Struktur von 2 Webseiten zu vergleichen?
- 21. Gibt es irgendwelche StackExchange.Redis-Beispielprojekte?
- 22. Gibt es irgendwelche würdigen CSLA-Alternativen?
- 23. Ausführungszeit Unterschiede, gibt es irgendwelche?
- 24. Tool zum Überprüfen von Speicherlecks in Android
- 25. Gibt es irgendwelche Clojure DSLs?
- 26. Gibt es irgendwelche Guava-Übersichten?
- 27. Tool zum Erkennen von Speicherlecks
- 28. Gibt es irgendwelche guten Tools für die Integration von GWT mit ASP.Net?
- 29. Gibt es irgendwelche .NET Graphics Calculate Libraries?
- 30. Gibt es Speicherlecks beim Neuzuweisen einer Variablen?