Seite 1 von 1

Suche Python-Analysetool

Verfasst: Mittwoch 27. Juli 2011, 10:55
von Michael Schneider
Hallo Freunde,

ich habe im Forumsarchiv gesucht, aber meine Frage ist wohl zu speziell.

Das gegebene Problem ist ein bestehendes, recht umfangreiches Programm. Es verwendet unter anderem SQL-Alchemy und andere gekapselte third-party Pakete/Module. Offenbar hat das laufende Programm aber ein Speicherleck und nach wenigen Durchläufen ist der Speicher mit einigen Gigabyte Müll gefüllt.

Die Frage ist, wie kann man den Übeltäter aufspüren, insbesondere wenn er sich in den third-party Paketen verstecken sollte?

Es wurde schon versucht, mit sys.getrefcount zu prüfen, ob auch alle Referenzen auf die größten selbst geschriebenen Datenobjekte gelöscht wurden, was soweit der Fall war.

Welche Tools / Programms gibt es, die eine Ausführung des Scripts simulieren und dabei Speicherverbrauch und Inhalte von referenzierten Objekten übersichtlich darstellen? Evtl. das PyDev Plugin für Eclipse? Ich habe mal gehört, dass es solche Tools gibt, aber ich kann sie nicht finden.

Würde mich sehr freuen, wenn mir jemand helfen könnte.

Grüße,
Michael

Re: Suche Python-Analysetool

Verfasst: Mittwoch 27. Juli 2011, 12:05
von LivingOn
vielleicht ist "Heapy" was Du suchst!?

Re: Suche Python-Analysetool

Verfasst: Mittwoch 27. Juli 2011, 12:14
von Michael Schneider
Hallo,
LivingOn hat geschrieben:vielleicht ist "Heapy" was Du suchst!?
auf den ersten Blick würde ich sagen, das ist GENAU das, was ich suche (und irgendwann schonmal gesehen hatte). :)

Vielen Dank für die superschnelle Antwort, ich werde es testen (lassen). :-D

Viele Grüße,
Michael

Re: Suche Python-Analysetool

Verfasst: Mittwoch 27. Juli 2011, 21:58
von ocoal
Hallo auch,

alternativ könntest Du es auch mit folgenden Tools probieren:
  • cProfile
    RunSnake
    line_profiler
Hier findest Du auch noch ein paar Informationen zu dem Thema: Beste Grüße,
Colin

Re: Suche Python-Analysetool

Verfasst: Mittwoch 27. Juli 2011, 23:02
von senft
Da ein Speicherleck gesucht wird, wird ein Profiler da nicht viel bringen.

Re: Suche Python-Analysetool

Verfasst: Dienstag 9. August 2011, 09:34
von Michael Schneider
Hallo nochmal,

zur Auflösung: Heapy hat uns auf die Spur gebracht.

Der Kollege hat Attribute eines ORM-Objekts von SQLAlchemy über __dict__ direkt gesetzt. Mir fiel das schon ins Auge, weil ich wusste, dass SQLA vieles über Properties oder Setter/Getter macht. Es gab aber keinen Fehler und das Programm lief an den besagten Stellen korrekt. Offenbar wird das Attribut bei Verwendung der Setter aber gesondert gespeichert und nur dann wird das Objekt beim Verwerfen des Namens auch korrekt (und vollständig) zerstört.

Danke auch für die anderen Vorschläge! Die werde ich mir auch ansehen und in geeigneten Fällen verwenden.

Gruß,
Michael

Re: Suche Python-Analysetool

Verfasst: Dienstag 9. August 2011, 10:04
von snafu
Eventuell lohnt es sich, in der Hinsicht mal einen Bugreport an die Entwickler von SQLAlchemy zu schreiben...

Re: Suche Python-Analysetool

Verfasst: Dienstag 9. August 2011, 11:24
von Michael Schneider
snafu hat geschrieben:Eventuell lohnt es sich, in der Hinsicht mal einen Bugreport an die Entwickler von SQLAlchemy zu schreiben...
Ich möchte sagen, dass ich in der SQLAlchemy Doku (vor Jahren mal) gelesen habe, dass man die Attributzuweisung verwenden und die __dict__-Manipulation vermeiden soll. Das kann ich aber auch mit einer der vielen anderen Dokumentationen verwechseln, die ich schon gelesen habe, ich bin da nie so tief eingestiegen und bin mir daher nicht ganz sicher.

Ich gehe aber davon aus, dass ein Bugreport unangebracht ist, wenn ein solcher Hinweis in der Dokumentation zu finden ist, oder sollte man in solchen Fällen eine Exception erwarten? Kann man einen Zugriff auf instance.__dict__ überhaupt abfangen?

Gruß,
Micha

Re: Suche Python-Analysetool

Verfasst: Dienstag 9. August 2011, 11:34
von DasIch
Das ist definitiv kein Bug. Man sollte unter nie auf __dict__ zugreifen gerade weil es Deskriptoren umgeht und Speicheroptimierungen verhindert.