Debugging bei Speicherproblem?

classic Classic list List threaded Threaded
4 messages Options
Reply | Threaded
Open this post in threaded view
|

Debugging bei Speicherproblem?

Marc Rödder-3
Hallo,

ich habe ein Problem mit einem Skript, welches per pyglet und PIL Bilddateien einliest und darstellt. Das Einlesen geschieht in eine Warteschlange, wo die Bilder nacheinander abgespielt werden.
Jetzt habe ich allerdings das Problem, dass dieses Skript bei Überschreiten einer gewissen Menge an Bildern, die im Speicher vorgehalten werden, einfach stehen bleibt. Es gibt also keine Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte?

Grüße,
Marc
_______________________________________________
python-de maillist  -  [hidden email]
http://python.net/mailman/listinfo/python-de
Reply | Threaded
Open this post in threaded view
|

Re: Debugging bei Speicherproblem?

Ulf Rompe-5
Am 19.07.2010 23:41, schrieb Marc Rödder:
> Jetzt habe ich allerdings das Problem, dass dieses Skript bei
> Überschreiten einer gewissen Menge an Bildern, die im Speicher
> vorgehalten werden, einfach stehen bleibt. Es gibt also keine
> Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance
> oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte?

Auf welchem Betriebssystem läuft das denn? Verbraucht der Python-Prozess
noch Rechenzeit, wenn das Programm stehen bleibt? Falls nicht, würde ich
mal den Interpreter selbst unter die Lupe nehmen. Unter Linux kann man
dafür beispielsweise die Prozess-ID mittels "ps aux" ermitteln und dann
mittels "strace -f -p <Prozess-ID>" schauen, was der Interpreter gerade
zu tun versucht. Den Prozess kann man jederzeit an strace attachen, aber
man sollte bedenken, dass strace die Ausführung deutlich verlangsamt und
dass es extrem viel ausgeben kann. Letzteres kann Dir leicht die Platte
vollschreiben, wenn Du mit "-o" die Ausgabe in eine Datei umleitest.

Ein anderer Ansatz wäre, das Script mittels pdb zu starten. Dort würde
ich zunächst einmal "continue" sagen und, wenn es denn wieder
eingefroren ist, beherzt Ctrl-C drücken. Dann siehst Du schon einmal, an
welcher Stelle im Code sich der Interpreter gerade befand, und Du kannst
aktuell besetzte Variablen inspizieren. Damit sollte man dann schon
weiter kommen, und sei es nur so weit, dass man eine Ahnung bekommt, an
welchen Stellen man noch mehr Debug-Ausschriebe in das Script stecken
sollte, um den Fehler weiter einzugrenzen.

[x] ulf

--
Rome did not create a great empire by having meetings,
they did it by killing all those who opposed them.

_______________________________________________
python-de maillist  -  [hidden email]
http://python.net/mailman/listinfo/python-de
Reply | Threaded
Open this post in threaded view
|

Re: Debugging bei Speicherproblem?

Marc Rödder-3
Hallo Ulf,

danke, ich glaube das könnte mir schon sehr weiterhelfen!
Interessant wäre es noch, genauer zu wissen, welche Methode oder welche Variable wieviel Speicher belegt...oder wo gerade von wem welcher Speicher angefordert wird. Gibts da auch irgendwas? Irgendwie scheint es mir nämlich so, als würde periodisch immer wieder Speicher angefordert und belegt, ohne dass es im Code irgendwo explizit geschieht. Dort sollte eigentlich direkt am Anfang der nötige Speicher belegt werden und danach konstant bleiben (theoretisch).

Grüße,
Marc

Am 21.07.2010 um 14:22 schrieb Ulf Rompe:

> Am 19.07.2010 23:41, schrieb Marc Rödder:
>> Jetzt habe ich allerdings das Problem, dass dieses Skript bei
>> Überschreiten einer gewissen Menge an Bildern, die im Speicher
>> vorgehalten werden, einfach stehen bleibt. Es gibt also keine
>> Fehlermeldung und keinen wirklichen Absturz. Sieht jemand eine Chance
>> oder hat jemand einen Tipp, wie man das vernünftig debuggen könnte?
>
> Auf welchem Betriebssystem läuft das denn? Verbraucht der Python-Prozess noch Rechenzeit, wenn das Programm stehen bleibt? Falls nicht, würde ich mal den Interpreter selbst unter die Lupe nehmen. Unter Linux kann man dafür beispielsweise die Prozess-ID mittels "ps aux" ermitteln und dann mittels "strace -f -p <Prozess-ID>" schauen, was der Interpreter gerade zu tun versucht. Den Prozess kann man jederzeit an strace attachen, aber man sollte bedenken, dass strace die Ausführung deutlich verlangsamt und dass es extrem viel ausgeben kann. Letzteres kann Dir leicht die Platte vollschreiben, wenn Du mit "-o" die Ausgabe in eine Datei umleitest.
>
> Ein anderer Ansatz wäre, das Script mittels pdb zu starten. Dort würde ich zunächst einmal "continue" sagen und, wenn es denn wieder eingefroren ist, beherzt Ctrl-C drücken. Dann siehst Du schon einmal, an welcher Stelle im Code sich der Interpreter gerade befand, und Du kannst aktuell besetzte Variablen inspizieren. Damit sollte man dann schon weiter kommen, und sei es nur so weit, dass man eine Ahnung bekommt, an welchen Stellen man noch mehr Debug-Ausschriebe in das Script stecken sollte, um den Fehler weiter einzugrenzen.
>
> [x] ulf
>
> --
> Rome did not create a great empire by having meetings,
> they did it by killing all those who opposed them.
>
> _______________________________________________
> python-de maillist  -  [hidden email]
> http://python.net/mailman/listinfo/python-de
>


_______________________________________________
python-de maillist  -  [hidden email]
http://python.net/mailman/listinfo/python-de
Reply | Threaded
Open this post in threaded view
|

Re: Debugging bei Speicherproblem?

Diez B. Roggisch

On Jul 21, 2010, at 3:06 PM, Marc Rödder wrote:

> Hallo Ulf,
>
> danke, ich glaube das könnte mir schon sehr weiterhelfen!
> Interessant wäre es noch, genauer zu wissen, welche Methode oder welche Variable wieviel Speicher belegt...oder wo gerade von wem welcher Speicher angefordert wird. Gibts da auch irgendwas? Irgendwie scheint es mir nämlich so, als würde periodisch immer wieder Speicher angefordert und belegt, ohne dass es im Code irgendwo explizit geschieht. Dort sollte eigentlich direkt am Anfang der nötige Speicher belegt werden und danach konstant bleiben (theoretisch).

Schau dir mal pympler an - gearbeitet habe ich damit selbst aber noch nicht.

Diez
_______________________________________________
python-de maillist  -  [hidden email]
http://python.net/mailman/listinfo/python-de