memory problem

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
thomas15
User
Beiträge: 98
Registriert: Montag 7. April 2008, 19:07

hallo schlangenbeschwoerer,

ich habe ein speicherproblem in meinem python program und dachte dass ich mich an versiertere pythonianer wende die vielleicht ein how to kennen was mir weiterhilft.

meine python - swig schnitstelle verwaltet c++ klassen (3D volumen) und laest allerhand algorithmen auf diese los.
bei einer methode habe ich festgestellt dass sie den speicher zukleistert und irgendwo einen speicherteil nicht freigibt, und somit bei wiederholung das ganze system einfriert weil der speicher aus ist.
also ein klassisches memory leak das man bei c++ mit valgrind finden wuerde.
da ich aber nun mein algorithmus in python habe frage ich mich wie ich am besten den speicher ueberwachen koennte um mein leak zu finden.
gibts python tools die sowas koennen?
valgrind dumpt leider nicht den python code mit in sein protokoll wenn man es wie folgt aufruft:

valgrind --tool=memcheck --suppressions=./python.supp --leak-resolution=high --leak-check=full --show-reachable=yes --log-file=val1 python tmp &

es sieht so aus als wuerden ein paar python-objekte herrenlos im speicher rumschwirren die nur bei ende von python selbst freigegeben werden. (garbage collector oder aehnliches)

das problem ist recht komplex, deswegen waer es cool wenn ihr allgemeine antworten / links haettet... (wenn ueberhaupt)

danke schonmal fuer die hilfe,
thomas
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Auf reddit trifft man ab und zu auf einen Artikel zu dem Thema.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Abgesehen von den vielen Verweisen auf das gc-Modul: Damit kommst Du ja nur weiter, wenn SWIG einen Fehler gemacht hat. Aber SWIG wird sich ja nur um einen Teil der Werte (Eingabe / Rückgabe) der Funktionen kümmern. Wenn der Leak in einer Funktion ist, bist Du mit gc aufgeschmissen. Den Zugang mit valgrind erhälst Du aber rel. einfach bei purem C++ Code: Schreibe doch einfach eine main()-Routine, in der Du Deine Funktionen mit Dummy-Daten fütterst und kompiliere per Hand.

Gruß,
Christian
Antworten