Der Hauptparameter für die Optimierung der Speichernutzung von Apache ist MaxClients
. Wenn der Wert zu niedrig ist, gehen Ihnen die verfügbaren Slots zur Bearbeitung von Clientanforderungen aus. Zu viele und Sie werden Ihren gesamten RAM verbrauchen und beginnen, Swap-Speicherplatz zu verwenden, der die Leistung beeinträchtigt (es scheint sich um einen Serverabsturz zu handeln).
Eine Möglichkeit zur Optimierung MaxClients
besteht darin, die Speichernutzung des Systems zu beobachten und die Einstellungen nach Bedarf zu ändern. Wenn der Server zu tauschen beginnt, bearbeiten Sie ihn nach unten. Wenn der Server über freien Speicher verfügt, legen Sie ihn ab.
Sie können den Maximalwert auch schätzen, indem Sie sich die Speichernutzung von Apache ansehen. Starten Sie top
und drücken Sie M
, um Prozesse nach Speicher zu sortieren. Sie sollten etwas sehen wie:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
18698 apache 17 0 141m 59m 41m S 0.0 1.6 4:57.46 httpd
18591 apache 17 0 141m 59m 41m S 0.0 1.5 4:54.79 httpd
22917 apache 16 0 141m 57m 39m S 0.0 1.5 4:57.44 httpd
18595 apache 16 0 142m 57m 38m S 0.0 1.5 5:23.43 httpd
18697 apache 16 0 139m 56m 41m S 0.0 1.5 5:09.29 httpd
18735 apache 25 0 141m 56m 38m S 0.0 1.5 5:05.32 httpd
Subtrahieren Sie die Spalten RES und SHR, um die ungefähre Speichernutzung pro Apache-Instanz zu erhalten. In diesem Fall sind es ungefähr 16 MB. Wenn ich 4 GB RAM habe und möchte, dass 3 GB für Apache verwendet werden, liegt meine MaxClients-Einstellung bei:
MaxClients = 3000/16 = 188
In diesem Fall könnte ich also mit einem Wert von 150-200 beginnen, aber ich würde die Speichernutzung beobachten und wenn es jemals anfangen würde, Swap zu verwenden, würde ich MaxClients um 10-20% verringern. Beachten Sie auch, dass der Wert von 3 GB nur ein zufälliges Beispiel ist. Auf Servern, auf denen nur Apache ausgeführt wird, kann ich möglicherweise fast alle 4 GB verwenden. In anderen Fällen möchte ich möglicherweise nur 1 oder 2 GB für Apache, die restlichen für andere Anwendungen, das System oder den Cache.
Bearbeiten: Beantwortung zusätzlicher Fragen
Es gibt im Allgemeinen keine magischen Werte von MaxClients oder anderen Apache-Konfigurationsparametern, die Ihren Server plötzlich doppelt so schnell machen. Einige Server scheinen einwandfrei zu funktionieren, unabhängig davon, ob MaxClients 10 oder 1000 ist. Es gibt zwei Hauptfälle, in denen die MaxClients-Einstellung "schlecht" ist:
- Zu niedrig : Wenn MaxClients zu niedrig ist, werden Sie eine Situation erreichen, in der alle Apache-Clients verwendet werden und neue Verbindungen in eine Warteschlange gestellt werden, die darauf wartet, dass der nächste Client verfügbar wird. Wenn Sie den mod_status von Apache aktivieren, können Sie in Echtzeit sehen, wie viele Clients zu einem bestimmten Zeitpunkt beschäftigt sind. Dieser Status ist relativ einfach zu diagnostizieren, da die Site in Zeiten mit hohem Datenverkehr langsam wird und beobachtet werden kann, dass alle Clients verwendet werden.
- Zu hoch : Wenn MaxClients zu hoch ist, wird der gesamte Arbeitsspeicher erschöpft und der Swap wird verwendet. In diesem Fall sinkt die Leistung Ihrer Site im Wesentlichen auf Null (berücksichtigen Sie den Geschwindigkeitsunterschied zwischen RAM und Festplatte). Dieser Status kann viel schwieriger zu beobachten und zu diagnostizieren sein, da ein Server mit hohen MaxClients einwandfrei funktioniert, bis ein Anstieg des Datenverkehrs auftritt. Zum Beispiel kann ich auf einer Site, die einige Zugriffe pro Stunde erzielt, MaxClients auf 1000 setzen, was weit mehr als vom RAM unterstützt wird, aber nie ein Problem festgestellt hat, da Apache nur einen oder zwei Clients gleichzeitig verwenden muss. Ich werde das Problem nur erkennen, wenn ich einen Anstieg des Datenverkehrs bekomme und die Anzahl der gleichzeitig verwendeten Clients erhöhe, bis der Arbeitsspeicher erschöpft ist und Swap-Speicherplatz benötigt wird.
Obwohl ich die Details Ihres Servers, Ihrer Anwendung oder Ihres Datenverkehrs nicht kenne, kann ich die folgenden Konfigurationswerte als Ausgangspunkt vorschlagen. Probieren Sie sie aus, überwachen Sie die Auslastung und Nutzung des Servers und ändern Sie die Einstellungen nach Bedarf.
- mod_status : Aktivieren Sie dies, damit Sie die Verwendung von Apache sehen können. Für erweiterte Statistiken installieren Sie eine Überwachungsanwendung wie Zabbix / Nagios, damit Sie die Servernutzung und die Verkehrsmuster verfolgen können.
- MaxClients : Auf einen Wert von 100-200 setzen. Ich würde mit einem niedrigeren Wert beginnen, wenn ich nicht sicher bin und die Speicher- / CPU- / Apache-Nutzung überwachen soll. Dies ist der Hauptparameter für die Optimierung.
- MaxRequestsPerChild : Gibt an, wann ein Apache-Client / Kind neu gestartet wird. Es gibt keinen falschen Wert (obwohl sehr kleine Werte möglicherweise ineffizient sind) und dies hängt davon ab, welchen Inhalt Sie bereitstellen. Bei dynamischen Inhalten verhindert ein großer Wert ungleich Null (z. B. 1000), dass Ihre httpd-Prozesse möglicherweise zu groß werden.
- Andere Parameter : Obwohl ich die verbleibenden Parameter nicht gründlich bewertet habe, sollten sie einen relativ geringen Effekt haben, es sei denn, Sie setzen sie auf sehr niedrige oder sehr hohe Werte. Die Verwendung der Standardeinstellungen sollte für die meisten Websites in Ordnung sein. In der Dokumentation zum Apache Prefork- oder Worker- Modul finden Sie eine vollständige Beschreibung der Parameter, die in jedem Modul verwendet werden (es macht keinen Sinn, einen Parameter zu optimieren, den Sie nicht verwenden).
- Benchmarking : Wenn Sie Parameter anpassen, würde ich empfehlen, ein Benchmarking-Tool wie ab (ApacheBench) oder Belagerung zu verwenden, um eine quantitative Zahl für die Funktionen Ihres Servers zu erhalten. Es ist keine gute Methode, die Parameter eines Webservers zu optimieren, wenn man sich nur auf das Gefühl oder Schlimmeres verlässt, um zu sehen, ob es abstürzt oder nicht.