Suche Python-Analysetool

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
LivingOn
User
Beiträge: 33
Registriert: Montag 11. August 2008, 07:53

vielleicht ist "Heapy" was Du suchst!?
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
ocoal
User
Beiträge: 32
Registriert: Mittwoch 20. Juli 2011, 22:44

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
senft
User
Beiträge: 25
Registriert: Montag 31. März 2008, 14:47

Da ein Speicherleck gesucht wird, wird ein Profiler da nicht viel bringen.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
snafu
User
Beiträge: 6833
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eventuell lohnt es sich, in der Hinsicht mal einen Bugreport an die Entwickler von SQLAlchemy zu schreiben...
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Das ist definitiv kein Bug. Man sollte unter nie auf __dict__ zugreifen gerade weil es Deskriptoren umgeht und Speicheroptimierungen verhindert.
Antworten