Optimierung der Apache-Speichernutzung

10

Apache verwendet zu viel Server-Speicher, wodurch er abstürzt. Ich habe 4 GB RAM im Server.

Ich versuche, die Apache-Einstellungen zu optimieren, um die Leistung zu verbessern, aber ich bin ziemlich neu darin.

Ich habe versucht, den Ratschlägen dieses Artikels zu folgen , bin mir aber nicht sicher, wie ich die Dinge berechnen soll, und es scheint, als würde ich es noch schlimmer machen.

Mein Top lautet wie folgt:

11697 apache    15   0  322m  37m 4048 S  0.0  0.9   0:00.52 httpd
13602 apache    15   0  323m  37m 3944 S  0.0  0.9   0:00.50 httpd
11786 apache    15   0  322m  36m 4052 S  0.0  0.9   0:00.50 httpd
12525 apache    15   0  322m  36m 4040 S  0.0  0.9   0:00.63 httpd
11806 apache    15   0  322m  36m 3952 S  0.0  0.9   0:00.42 httpd
11731 apache    15   0  322m  36m 4036 S  0.0  0.9   0:00.46 httpd
11717 apache    16   0  322m  36m 3956 S  0.0  0.9   0:00.54 httpd
11659 apache    15   0  322m  36m 3980 S  0.0  0.9   0:00.49 httpd

So wäre es

MaxClients = 3000/ (322-37) = 10

Ist das richtig? Welche Werte sollten auch für die anderen Parameter wie MinSpareServers, MaxSpareServers, MaxRequestsPerChild, StartServers, MinSpareThreads, MaxSpareThreads, ThreadsPerChild, MaxRequestsPerChild gelten?

Würde mir bitte jemand helfen?

Aktualisieren

Ich habe versucht, was ihr vorgeschlagen habt. Es funktioniert, aber nur für eine Weile. Nach einiger Zeit nach dem Start des Servers nimmt die Speichernutzung weiter zu und fällt nie mehr ab.

Ich meine, nachdem ich den Server gestartet habe, nehmen wir an, dass 500 Benutzer online sind. Der Server verbraucht X RAM. 2 Stunden später verbraucht der Server mit denselben 500 Benutzern online 10x RAM.

Gibt es eine Möglichkeit, dies zu vermeiden, oder muss ich den Server weiter beobachten und von Zeit zu Zeit neu starten?

Souljacker
quelle
1
Wenn Sie Ihrer Frage Aktualisierungen hinzufügen, bearbeiten Sie bitte das Original, anstatt eine Antwort zu veröffentlichen. Dies hat auch den zusätzlichen Vorteil, dass die Frage erneut oben auf der Startseite angezeigt wird.
Ben Pilbrow

Antworten:

13

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 MaxClientsbesteht 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 topund 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.
uesp
quelle
MaxClients wurde ab Apache 2.4 in MaxRequestWorkers umbenannt.
Jastram