fragen stichworte

Wie man Apache auf Ubuntu 14.04 Server abstimmt

Derzeit auf meinem Apache 2 (Apache 2.4.7, um genau zu sein) auf Ubuntu 14.04, habe ich folgende Einstellung:

/etc/apache2/mods-enabled/mpm_prefork.conf

<IfModule mpm_prefork_module>
StartServers                    20
MinSpareServers                 100
MaxSpareServers                 250
MaxRequestWorkers               150
MaxConnectionsPerChild          0
</IfModule>

Bei dem Server handelt es sich um einen Amazon-Server mit 8 GB (RAM), der lediglich ein Anmeldeformular für drei Seiten für einige Google-Anzeigenkampagnen lädt.

Ich habe im Web ein Skript mit dem Namen apachetuneit.sh gefunden, aber nach einiger Zeit meldete der Apache diesen Fehler:

[Di Apr 21 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: Server hat die Einstellung "MaxRequestWorkers" erreicht. Erwägen Sie, die Einstellung "MaxRequestWorkers" auf

zu erhöhen

Wie kann ich beurteilen, wie diese Einstellungen vorgenommen werden?

Ich frage ausdrücklich nur nach dem Tuning von Apache 2.4 und nach nichts anderem. Deshalb unterscheidet sich diese Frage von dieser Frage.

antworten

  1. Erkennen Sie, dass Ubuntu 14.04 Apache 2 verwendet, wobei PHP über ein mpm_prefork -Modul läuft, dessen bearbeitbare Datei sich in/etc/apache2/mods-enabled/mpm_prefork.conf befindet. Beachten Sie außerdem, dass ab Apache 2.4 MaxClients jetzt in MaxRequestWorkers umbenannt wird. Daher muss die Dokumentation zu MaxClients auf MaxRequestWorkers umgestellt werden.

  2. Beenden Sie den Apache-Webdienst vorübergehend mit dem folgenden Befehl:

   sudo service apache2 stop
  1. Warten Sie 5 Sekunden und führen Sie dann den folgenden Befehl aus, um herauszufinden, wie viel virtueller Speicher auf dem Server vorhanden ist, der frei ist:
   sudo free -ht

Lesen Sie die Zeile Mem: und sehen Sie sich die freie Spalte an. Betrachten Sie dies als die Menge an RAM, die Sie für Apache reservieren können, obwohl ich normalerweise 2 GB auf einem beefier-Server (wie in> 4 GB) oder 1 GB auf einem leichteren Server abziehen möchte. Wenn also in der kostenlosen Spalte angegeben wurde, dass ich 13 GB frei hatte, würde ich empfehlen, Apache 11 GB zu geben. Das ist eine Grundlinie. Wenn in den Protokollen gelegentlich Datenbankprobleme auftreten (z. B. 3 Mal in den Protokollen über einen Zeitraum von 3 Tagen), dass mehr Speicher benötigt wird, könnten wir davon ausgehen, dass wir nur 10 GB anstelle von 11 GB hatten (in diesem Fall) ). Wenn wir in den Apache-Protokollen feststellen, dass der Server mehr MaxRequestWorkers benötigt, dann ist das ein separates Problem, das ich unten ansprechen werde.

  1. Starten Sie den Apache-Webserver.
   sudo service apache2 start
  1. Öffnen Sie wie 10 Browser-Registerkarten, verbinden Sie sich mit einigen Ihrer längeren oder langsamer geladenen Seiten von Ihrer Website und aktualisieren Sie sie auf jeder Registerkarte 3-4 mal.

  2. Führen Sie danach schnell den folgenden Befehl aus:

   sudo ps -ylC apache2 | awk '{x += $8;y += 1} END {print "Apache Memory Usage (MB): "x/1024; print "Average Process Size (MB): "x/((y-1)*1024)}'

Führen Sie es 5 mal schnell aus.

Sehen Sie sich den Wert für die durchschnittliche Prozessgröße an und ermitteln Sie den Durchschnitt aus den 5 Durchläufen, die Sie ausgeführt haben.

Führen Sie nun die folgenden Berechnungen durch, und stellen Sie sicher, dass GB nach Bedarf in MB konvertiert wird, damit alle Zahlen in MB angegeben werden. Multipliziere also mal 1024 oder dividiere mit 1024, je nachdem, welchen Weg du gehen musst.

MaxRequestWorkers = Baseline Free (mit Pufferplatz)/Durchschnittliche Prozessgröße

Ich hatte zum Beispiel einen 14-GB-Server, aber als Apache gestoppt wurde, zeigte der Server an, dass er 1 GB RAM im Leerlauf belegte. Ich stelle dann noch 1 GB zusätzlichen Pufferplatz für das Betriebssystem bereit, falls dies erforderlich ist. Das bedeutet, ich hätte eine Baseline Free von 12 GB. Jetzt muss ich es von GB in MB konvertieren, und so multipliziere ich 12 x 1024 und bekomme 12288. Die 12288 MB ist mein Baseline Free-Wert. In meinem Fall sah ich, dass die durchschnittliche Prozessgröße 21 MB betrug. Ich nehme also 12288/21 und erhalte ungefähr 585. Nun ist es üblich, dass sysops diesen Wert abrunden, und so erhielt ich 580.

  1. Bearbeiten Sie die Datei/etc/apache2/mods-enabled/mpm_prefork.conf und setzen Sie die folgenden Standardeinstellungen in Betracht. Ersetzen Sie XXX durch Ihre MaxRequestWorkers-Berechnung:
`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Beachten Sie, dass der Parameter ServerLimit dort möglicherweise nicht angezeigt wird. Fügen Sie es hinzu. Dieser Parameter ist standardmäßig auf 256 gesetzt, wenn er nicht vorhanden ist, er muss jedoch den gleichen Wert wie MaxRequestWorkers haben. Andernfalls wird ein Fehler angezeigt.

  1. Ein weiterer kritischer Faktor in Ihrer Apache-Konfiguration ist die Datei/etc/apache2/apache2.conf mit der Variablen Timeout, die in Sekunden gemessen wird. So lange können Sie vom Server senden oder empfangen, bevor das Zeitlimit überschritten wird. Sie müssen auch das Hochladen von Dateien oder das Herunterladen von Dateien berücksichtigen, z. B. wenn Sie über eine Website verfügen, auf der CSV-Dateien oder andere große Dateien hochgeladen oder heruntergeladen werden können. Sie müssen einen ausgelasteten Datenbankserver im Auge behalten, und Sie müssen möglicherweise etwas Zeit angeben, bevor Seiten-Timeout auftritt. Je kleiner Sie diese Zeitlimitvariable machen, desto verfügbarer ist der Webserver, um neue Verbindungen zu erhalten. Beachten Sie jedoch, dass die Einstellung dieses Werts zu niedrig für PHP-Sitzungsvariablen, jedoch nicht für Browser-sitzungsbasierte Cookies, zu Problemen führen kann. Ein Wert von 300 (5 Minuten) ist beispielsweise für einen Webserver von Vorteil, der PHP-Sitzungsvariablen für den Web-App-Workflow anstelle von Browsersitzungscookies verwendet. Ein Wert von 45 kann für einen Webserver von Vorteil sein, der nicht mehr als statische Zielseiten für Werbung bereitstellt, wäre aber für einen Server, der PHP-Session-Variablen verwenden muss, fürchterlich. Bearbeiten Sie also den Timeout-Parameter in dieser Datei auf die Menge, die Sie benötigen. Dies kann einige Tests mit allen Ihren Webseiten erfordern, um festzustellen, ob der Wert zu niedrig ist. Es ist jedoch wahrscheinlich eine gute Idee, es nicht höher als 300 einzustellen, es sei denn, Sie haben Probleme beim Hochladen großer Dateien oder beim Herunterladen großer Dateien.

  2. Starten Sie jetzt Ihren Apache-Webdienst neu. Wenn Sie etwas falsch gemacht haben, wird Apache Sie wahrscheinlich gleich beim nächsten Start darüber informieren, und Sie können es korrigieren.

   sudo service apache2 restart
  1. Wiederholen Sie jetzt den 10-Tab-Browser-Trick, den Sie zuvor ausgeführt haben, und prüfen Sie, ob im Apache-Webserver-Fehlerprotokoll Fehler in der Apache-Konfiguration auftreten:
   sudo tail -f/var/log/apache2/error.log

... drücken Sie STRG + C, um das zu beenden, falls Sie möchten.

Suchen Sie nach einer Beschwerde, dass Sie MaxRequestWorkers benötigen (und vor kurzem, seit Sie den Webserver neu gestartet haben). Wenn Sie dies auch bei einer optimalen Einstellung von MaxRequestWorkers sehen, benötigen Sie wahrscheinlich mehr Feuerkraft für Ihre Websites oder Webanwendungen. Berücksichtigen Sie diese Optionen:

  • Verwenden eines CDNs für das Herunterladen großer Dateien, Bilder und Skripts.
  • Verwenden eines Caching-Dienstes wie CloudFlare oder anderen.
  • Wiederholen Sie Ihre Website- oder Webanwendungsstrategie, um mehrere Webserver zu verwenden, die als "Web-App" hinter einem Load Balancer fungieren.
  • Hinzufügen von mehr RAM zum Server und Ausführen dieser Berechnung von neuem.

  1. Nun, da der Apache-Server optimiert ist, ist dies eine Art Baseline-Optimierung. Sie müssen dies im Verlauf von 2-3 Wochen überprüfen und in den Apache-Fehlerprotokollen nach Problemen mit MaxRequestWorker suchen. Hieraus können Sie eine Entscheidung zur Optimierung treffen (siehe Schritt 10). Sie können Munin auch mit apt auf Ubuntu installieren und die Apache-Leistung im Laufe der Zeit betrachten und eine Vorstellung von Wachstum zeichnen, bevor Sie sich entscheiden, was Sie tun müssen, um den Umfang des Datenverkehrs zu ermitteln, den der Webserver verarbeitet.

Was Sie MaxRequestWorkers erreichen können, hängt davon ab, wie viel RAM jeder Ihrer httpd/apache-Prozesse belegt. Wenn jeder 50MB belegt (indem Sie einfach eine Zufallszahl auswählen), werden alle 20 Request-Worker, die Sie gleichzeitig verwenden (d. H. Gleichzeitige Verbindungen), 1 GB beanspruchen. In diesem Beispiel könnten Sie höchstens 8 GB * 20 = 160 MaxRequestWorker haben. Sie können jedoch nicht den gesamten Arbeitsspeicher für Apache verbrauchen, Sie müssen einige für andere Dinge reservieren, die dort laufen. Auch ein wenig freien Arbeitsspeicher kann hilfreich für die Leistung sein, da das Betriebssystem es zum Zwischenspeichern und zur Leistungssteigerung verwendet (obwohl es möglicherweise vorzuziehen ist, Verbindungen nicht zu haben, da der Server langsam erscheint) Benutzer-Browser warten auf eine Verbindung, die verfügbar wird, wenn sie alle aufgebraucht sind.