Seite 1 von 1

Speicherverbrauch von Threads messen

Verfasst: Sonntag 28. September 2008, 10:15
von feuervogel
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...

Verfasst: Sonntag 28. September 2008, 17:16
von veers
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 ;)

Verfasst: Sonntag 28. September 2008, 17:27
von feuervogel
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...

Verfasst: Montag 29. September 2008, 13:41
von Sr4l
Wie wärs ein Programm was du startets und die Djangoapps greifen per lokalen Sockets darauf zu?