Memory Profiling Tools für Python, Teil 2
pbouda am 02. Sep 13:33
Kaum hatte ich den vorhergehenden Blogeintrag fertig, bin ich mehr oder weniger zufällig auf zwei weitaus interessantere Projekte gestoßen, die Speicherlecks in Python-Anwendungen aufspüren sollen. Hier also, der Vollständigkeit halber, die Vo:
- Meliae: Für Python 2, wird aber im Gegensatz zu heapy aktiv weiter entwickelt. Für meine Zwecke aber derzeit unbrauchbar, bis es auch mit Python 3 funktioniert.
- gdb-heap: dies scheint aber nun wirklich der beste Ansatz zu sein: über die Python-Schnittstelle von gdb klinkt man sich direkt in eine laufende Anwendung ein und schaut sich im Speicher um. Es gibt ein spezielles Python-Modul zur Analyse der einzelnen Objekte, das an die Speicherverwaltung von Python angepasst ist. Einziger Wermutstropfen: das Tool scheint sehr an die gdb-Version von Fedora gebunden zu sein. Bei einem kurzen Versuch unter Ubuntu wollte jedenfalls das Python-Modul nicht starten. Definitiv aber ein Projekt, das ich weiter beobachten werde. Auf der Seite findet sich außerdem ein Link auf einen Vortrag auf der PyCon US 2011, der sehr schön die einzelnen Ansätze zur Speicheranalyse unter Python erklärt.
Speicherlecks in Python-Skripten finden
pbouda am 19. Aug 13:10
Da ich gerade ein kleines Speicherproblem mit einer Python-Anwendung hatte (und ich dachte schon, 8 GB RAM reichen erst einmal...), habe ich mich mal nach einem Memory-Profiler für Python-Skripte umgeschaut. Und leider nichts Vernünftiges gefunden. Was auch daran liegt, dass ich komplett auf Python 3 umgestiegen bin, und die Python-2-Profiler dann leider komplett den Dienst versagen. Hier mal drei Pakete, die wohl unter Python 2 funktionieren sollen:
- heapy: Ist angeblich das komplexeste, aber auch beste aller Tools. Als Ergebnis einer Master-Thesis entstanden, die es auch auf der Webseite zum Herunterladen gibt. Portierung auf Python 3 wohl nicht in Sicht. Und nach kurzer Ansicht des Quellcodes wohl auch nicht mal an einem Nachmittag durchführbar.
- PySizer: Weniger mächtig als heapy, und noch älter. Portierung nicht in Sichtweite.
- dowser: Die einfachste Art und Weise für Memory-Profiling. Das Tool lässt sich äußerst einfach in eigene Python-Skripte einbinden und stellt die Information dann per cherrypy zur Verfügung. So hat man während der Laufzeit des Skripts in einem Webbrowser einen Überblick über die aktuellen Objekte und deren Speicherverbrauch. Ich habe es
fast geschafft, das Ding unter Python 3 zum Laufen zu bringen; allerdings benutzt es die Python Imaging Library, für die es noch keine vernünftige Python-3-Version gibt. So fehlen auf der Ausgabe-Webseite dann die Bilder. Außerdem konnte ich die TRACE-Seiten nicht öffnen. Es waren wohl einfach zu viele Objekte in meinem Skript.
Wieder einmal das leidige Thema: Python 3 ist bestimmt toll, aber wenn es halt jeder ignoriert werden wir in 10 Jahren immer noch Anwendungen unter Python 2.x entwickeln. Übrigens habe ich letztendlich einen anderen Weg für das Speicherproblem gefunden. Das Problem war ein Parser; mit regulären Audrücken komme ich jetzt mit weniger Speicher und
