Speicherverbrauch von Threads messen

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
feuervogel
User
Beiträge: 28
Registriert: Dienstag 18. September 2007, 14:59

Hallo!

Ich habe eine Django-Applikation geschrieben und diese läuft bei Webfaction mit mod_python. Ich hatte jetzt mehrmals Probleme mit dem mir zugewiesenen Speicher, da er deutlich überschritten wurde und die mir meine Prozesse gekillt haben. Da es eine nicht wirklich speicherfressende Anwendung ist, liegt das wohl an den drei Middleware-Klassen, die ich geschrieben habe, die jeweils einen Thread darstellen und wohl drei mal gestartet werden, da der Apache drei mal läuft:

Code: Alles auswählen

  RSS    SZ     ELAPSED   PID COMMAND
 3560  1904       02:12 13117 /home/palaermo/webapps/cms/apache2/bin/httpd -f /home/palaermo/webapps/cms/apache2/conf/httpd.conf -k start
19432 303508      02:12 13118 /home/palaermo/webapps/cms/apache2/bin/httpd -f /home/palaermo/webapps/cms/apache2/conf/httpd.conf -k start
19408 293268      02:12 13119 /home/palaermo/webapps/cms/apache2/bin/httpd -f /home/palaermo/webapps/cms/apache2/conf/httpd.conf -k start
Nun habe ich die Middleware-Klassen zu Singletons umgestrickt und sie vorerst dekativiert. Meine Frage: Kann ich _irgendwie_ annähernd rausfinden, wie groß der Speicherverbrauch eines einzelnen Threads ist? Weil nur so kann ich im Endeffekt rausfinden, wo mein Speicherverbrauchsleck liegt...
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Threads *teilen* sich den Speicher, das unterscheidet sie ja von Prozessen. Deshalb kannst du grundsätzlich auch nicht herausfinden wie viel Memory ein Thread braucht.

Du könntest überwachen welcher Thread wie viel Memory alloziert aber das wäre wohl nicht ganz einfach ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
feuervogel
User
Beiträge: 28
Registriert: Dienstag 18. September 2007, 14:59

veers hat geschrieben:Threads *teilen* sich den Speicher, das unterscheidet sie ja von Prozessen. Deshalb kannst du grundsätzlich auch nicht herausfinden wie viel Memory ein Thread braucht.

Du könntest überwachen welcher Thread wie viel Memory alloziert aber das wäre wohl nicht ganz einfach ;)
Gut, das Problem hat sich dahingehend erledigt, dass sich die Applikation auf drei Apache-Prozesse verteilt und mir mein Singleton in dem Sinne auch nichts bringt. Ich muss es also irgendwie schaffen, dass die Threads wirklich nur _ein_ mal auf dem gesamten System gestartet werden. Mal gucken, ob ich das in die Django App integrieren kann, oder ob ich das lieber als Cronjob laufen lasse...
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Wie wärs ein Programm was du startets und die Djangoapps greifen per lokalen Sockets darauf zu?
Antworten