Begrenzen Sie die Speichernutzung von Apache 2

9

Ich verwende einen Hobby-Webserver auf einem alten Blue & White G3 / 300 mit Debian PPC Squeeze 2.6.30. Die Leistung ist nach einem Neustart für eine Weile in Ordnung, wird aber irgendwann immer mehr ins Stocken geraten. Derzeit ist die Betriebszeit 76 Tage, und der Hauptschuldige scheint die Speichernutzung von mehr als 10 Apache2-Prozessen zu sein.

Ich glaube , ich brauche die Werte zu senken StartServers, MinSpareServersund / oder MaxSpareServers, aber ich bin mir nicht sicher , was man zu justieren, und es gibt drei Abschnitte für jeweils abhängig von der mpm - Modul in Betrieb ist.

Wie kann ich feststellen, welchen der folgenden Abschnitte ich ändern muss und welche vernünftigen Werte es gibt, wenn die Box über einen physischen Speicher von 448 MB verfügt (seltsamer Upgrade-Verlauf von jeweils einem 64-, 128- und 256-Stick)?

<IfModule mpm_prefork_module>
    StartServers          5
    MinSpareServers       5
    MaxSpareServers      10
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_worker_module>
    StartServers          2
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxClients          150
    MaxRequestsPerChild   0
</IfModule>

<IfModule mpm_event_module>
    StartServers          2
    MaxClients          150
    MinSpareThreads      25
    MaxSpareThreads      75
    ThreadLimit          64
    ThreadsPerChild      25
    MaxRequestsPerChild   0
</IfModule>

Es gibt keine anderen Instanzen von StartServers in meiner apache2.conf, aber keines dieser mpm-Module wird in mods-availableoder angezeigt mods-enabled. Ideen?

Vielen Dank!

UltraNurd
quelle
Ich bin davon ausgegangen, dass Ihre Box nur noch wenig Speicher hat (und Ihre schlechte Leistung durch starkes Tauschen entsteht). Wenn Sie nicht tauschen, werde ich Sie für weitere Details
nerven

Antworten:

6

400 MB sind heutzutage nicht viel für einen Webserver - vielleicht möchten Sie die Box ersetzen :)

Das heißt, wenn Ihre Speichernutzung im Ballon steigt, haben Sie wahrscheinlich irgendwo einen Speicherverlust - für einen kurzen Test sehen Sie sich jetzt die Größe der httpd-Prozesse an, stoppen / starten Sie Apache und prüfen Sie, ob sie viel kleiner sind. Wenn sie sie ein paar Tage lang beobachten und sehen, ob sie wachsen.

Wenn es sich um ein Speicherleck handelt, besteht die eigentliche Lösung darin, das Speicherleck zu finden und zu beheben. Da dies jedoch normalerweise ein Problem ist, können Sie sich auch MaxRequestsPerChildauf etwas anderes als 0 (unbegrenzt) einstellen . Dadurch werden die Apache-Mitarbeiter getötet, wenn sie eine feste Anzahl von Anforderungen bearbeitet haben (wodurch sie gezwungen werden, ihren durchgesickerten Speicher aufzugeben.

Beginnen Sie mit größeren Werten (zu Tausenden oder so) und arbeiten Sie sich bis zu Hunderten vor. Wenn Sie weniger als 100 Anfragen pro Kind erhalten, ist Ihr Speicherverlust groß genug, um eine tatsächliche Behebung zu rechtfertigen , da der Leistungseinbruch durch ständiges Abschalten und erneutes Laichen von Apache-Mitarbeitern erheblich ist.


Betreff: Welche MPM eingestellt werden soll, ist mit ziemlicher Sicherheit die Antwort prefork.
Sie können rennen httpd -Vund nach der Server MPM:Linie suchen , die Ihnen sicher sagt.

voretaq7
quelle
1
-V gab mir die Prefork-Informationen, die ich brauchte (obwohl es in meinem Fall Apache2 -V ist). Vielen Dank!
UltraNurd
Scheint den Trick getan zu haben. Ich denke, das Problem war, dass mir der physische Speicher ausgegangen ist und ich getauscht habe, weil zu viele untergeordnete Server aktiv waren (jeder hat ungefähr 80 MB). Und ja, ich weiß, der Server ist alt. Aber es werden kaum Anfragen bearbeitet: oD.
UltraNurd
1
Wenn Sie nicht viele Anfragen bearbeiten, können Sie auch die Anzahl der Start- und
Ersatzserver
Am Ende habe ich die Min- und Max-Ersatzteile von 5 und 10 auf 3 und 6 gesenkt, und das scheint genug RAM übrig zu lassen, um zu verhindern, dass Dinge ausgetauscht werden. Vielen Dank!
UltraNurd
1

Um die Speichernutzung des Apache-Prozesses zu verbessern, müssen Sie die MaxClients anpassen.

Die allgemeine Faustregel lautet: (Maximaler gewünschter Speicher) / (Speichernutzung von 1 Apache-Prozess) = # Max. Clients

Am Ende müssen Sie auch Ihre MaxSpareServers <= Max Clients anpassen .

Die Speichernutzung eines Prozesses hängt stark von den von Ihnen geladenen Modulen ab (PHP usw.). Daher möchten Sie möglicherweise die maximale Anzahl von Clients etwas niedriger einstellen.


quelle