apache/mod_python-speicherhunger beschränken

  • hi

    ich habe auf einem server mit 128 mb ram, bisher ohne swap, der für mich physikalisch nicht erreichbar ist, letztens mod_python und eine python-anwendung (Trac) installiert. sonst liefen zur gleichen zeit auch noch mysqld, denyhosts, sshd und exim4. sofort nach dem 1. http-request konnte ich in meiner root-shell nichts mehr starten, da kein speicher verfügbar war ('could not fork'), nach ein bisschen herumprobieren hat es mich sogar aus dieser root-shell geworfen und ich hatte somit auch nicht mehr die chance, prozessen ein signal zu senden öä. (wär eh nur für init sinnvoll gegangen da prozessnummern ohne ls oder ps nicht mehr feststellbar), login war natürlich auch nicht mehr möglich. nachdem sich nach 1 tag nichts gebessert hatte (der apache hat jedoch weitgehend normal inhalte serviert), habe ich den server neu starten lassen.

    ist euch ähnliches schon mal passiert?
    wie würdet ihr es verhindern? ulimit? gibt es noch andere möglichkeiten?

    swap einschalten werde ich natürlich auch wenn möglich. dann habe ich noch mod_wsgi statt mod_python in betracht gezogen.. ich weiß nur leider nicht so genau, ob jetzt mod_python, python oder trac oder ganz wass anderes am speicherhunger des apache schuld war.

    lg,
    michi

  • Wenn du den Swap einschaltest umgehst du zwar das Problem, dass der Server überhaupt nicht mehr erreichbar ist, aber mit einem Webserver der swapt wirst du wohl alles andere als Spass haben.

    Mit deinem Setup ist es vollkommen normal dass die 128MB schon praktisch im idle aufgebraucht werden. Mindestens die Hälfte geht da schon für MySql drauf. Die ganzen mod_(python|php|perl) haben dazu u.a. noch den Zweck möglichst viel Daten im Speicher zu halten - macht bei produktiven Umgebungen mit viel Traffic auch Sinn, bei begrenzten Speicher aber eher kontraproduktiv.

    Erwartest du dir wirklich Traffic auf der Seite, und/oder willst das Software Setup nicht ändern, ist die einzige sinnvolle Lösung sich einen richtigen Server zu besorgen.

    Willst du bei den 128MB bleiben und trotzdem versuchen den Server (zumindest für wenig Traffic) ans laufen zu bekommen, hilft nur zu versuchen möglichst viel Speicher mit der verwendeten Software einzusparen:
    Alle nicht benötigten Features von MySql abschalten und die diversen Buffer deutlich runter schrauben.
    Lighttpd mit fastCGI statt Apache mit mod_python.
    denyhosts weg lassen, stattdessen Key-Authentifizierung verwenden und SSH auf einen anderen Port legen.

  • danke für die anregungen...

    nein es ist nur ein test-environment, daher gibt es auch keinen "richtigen" server. für die paar requests müssen die 128 mb reichen. ich habe mod_python in der erwartung aktiviert, dass es sich ähnlich wie mod_php verhält, das ganz gut funktioniert. ich werde es mal mit apache + fastcgi versuchen.

    lg,
    michi

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!