it-swarm.com.de

So optimieren Sie Apache unter Ubuntu 14.04 Server

Derzeit habe ich auf meinem Apache 2 (genauer gesagt Apache 2.4.7) unter Ubuntu 14.04 folgende Einstellung:

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

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

Der Server ist ein Amazon-Server mit 8 GB (RAM), der lediglich ein dreiseitiges Anmeldeformular für einige Google-Werbekampagnen lädt.

Ich habe ein Skript namens apachetuneit.sh im Web gefunden, aber nach einer Weile meldete der Apache diesen Fehler:

[Di 21 Apr 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: Server hat die MaxRequestWorkers-Einstellung erreicht. Erhöhen Sie möglicherweise die MaxRequestWorkers-Einstellung

Wie kann ich beurteilen, wie diese Einstellungen vorgenommen werden?

Ich frage speziell nur nach der Optimierung von Apache 2.4 und sonst nichts. Deshalb unterscheidet sich diese Frage von diese Frage .

18
ServerChecker
  1. Erkennen Sie, dass Ubuntu 14.04 Apache 2 mit PHP) verwendet, das durch 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 jede Dokumentation zu MaxClients auf MaxRequestWorkers umgestellt werden.

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

    Sudo Service Apache2 stoppen
  1. Warten Sie 5 Sekunden und führen Sie dann den folgenden Befehl aus, um herauszufinden, wie viel virtueller Speicher auf dem freien Server vorhanden ist:
    Sudo frei -ht

Lesen Sie die Zeile Mem: und sehen Sie sich die freie Spalte an. Betrachten Sie dies als die Menge an RAM, die Sie Apache widmen können, obwohl ich normalerweise 2 GB auf einem kräftigeren Server (wie in> 4 GB) oder 1 GB auf einem leichteren Server abziehen möchte. Wenn in der freien Spalte angegeben ist, dass ich 13 GB frei habe, würde ich empfehlen, Apache 11 GB zu geben. Dies ist eine Grundlinie. Wenn in den Protokollen gelegentlich (wie etwa dreimal in den Protokollen über einen Zeitraum von 3 Tagen) Datenbankprobleme auftreten, wird mehr benötigt Speicher, dann könnten wir annehmen, dass wir nur 10 GB zum Spielen anstelle von 11 GB hatten (in diesem Fall). Wenn wir in den Apache-Protokollen feststellen, dass der Server mehr MaxRequestWorker benötigt, ist dies ein separates Problem, das ich unten ansprechen werde.

  1. Starten Sie den Apache-Webserver.
    Sudo Service Apache2 starten
  1. Öffnen Sie wie 10 Browser-Registerkarten, stellen Sie eine Verbindung zu einigen Ihrer längeren oder langsamer ladenden Seiten von Ihrer Website her und aktualisieren Sie diese auf jeder Registerkarte 3-4 Mal.

  2. Führen Sie anschließend schnell den folgenden Befehl aus:

    Sudo ps -ylC Apache2 | awk '{x + = $ 8; y + = 1} END {print "Apache-Speichernutzung (MB):" x/1024; print "Durchschnittliche Prozessgröße (MB):" x/((y-1) * 1024)} '

Führen Sie es wie 5 mal schnell aus.

Sehen Sie sich den Wert für die durchschnittliche Prozessgröße an und mitteln Sie diesen Wert unter den fünf Malen, 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-Werten angegeben sind. Multiplizieren Sie also entweder mit 1024 oder dividieren Sie durch 1024, je nachdem, welchen Weg Sie gehen müssen.

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

Zum Beispiel hatte ich einen 14-GB-Server, aber als Apache gestoppt wurde, zeigte der Server an, dass 1 GB RAM im Leerlauf) verwendet wurde. Dann stelle ich weitere 1 GB in einem zusätzlichen Pufferplatz für das Betriebssystem bereit, falls dies erforderlich ist Das heißt, ich hätte eine Baseline Free von 12 GB. Jetzt muss ich sie von GB in MB konvertieren. Also multipliziere ich 12 x 1024 und erhalte 12288. Die 12288 MB sind mein Baseline Free-Wert. In meinem Fall habe ich gesehen, dass die Die durchschnittliche Prozessgröße betrug 21 MB. Ich nehme also 12288/21 und erhalte ungefähr 585. Nun ist es üblich, dass Sysops diesen Wert abrunden, und so habe ich 580.

  1. Bearbeiten Sie die Datei /etc/Apache2/mods-enabled/mpm_prefork.conf und setzen Sie sie auf die folgenden Standardeinstellungen. 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üge es hinzu. Dieser Parameter ist standardmäßig 256, wenn er nicht vorhanden ist, muss jedoch den gleichen Wert wie MaxRequestWorkers haben, da sonst eine Fehlermeldung angezeigt wird.

  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 einen Datei-Upload oder -Download in Betracht ziehen, z. B. wenn Sie eine Website haben, auf der Benutzer beispielsweise CSV oder andere große Dateien hochladen oder herunterladen können. Außerdem müssen Sie einen ausgelasteten Datenbankserver berücksichtigen und festlegen, wo Sie möglicherweise einige Zeit vor dem Seitenzeitlimit angeben müssen. Je kleiner Sie diese Timeout-Variable machen, desto mehr steht der Webserver für den Empfang neuer Verbindungen zur Verfügung. Beachten Sie jedoch, dass eine zu niedrige Einstellung dieses Werts zu Chaos mit PHP Sitzungsvariablen) führen kann, jedoch nicht mit sitzungsbasierten Cookies für Browser. So kann beispielsweise ein Wert von 300 (5 Minuten) auftreten Seien Sie gut für einen Webserver, der auf PHP Sitzungsvariablen für den Web-App-Workflow anstelle von Browsersitzungscookies basiert. Ein Wert von 45 ist möglicherweise gut für einen Webserver, der nur statische Werbung bereitstellt Zielseiten, aber für einen Server, der PHP Sitzungsvariablen] häufig verwenden muss, wäre dies schrecklich. Bearbeiten Sie daher den Parameter Timeout in dieser Datei in der erforderlichen Menge. Dies kann einige Tests erfordern mit all Ihren Webseiten, um festzustellen, ob der Wert zu niedrig ist. Es ist jedoch wahrscheinlich eine gute Idee, ihn nicht höher als 300 einzustellen, es sei denn, Sie sehen Probleme beim Hochladen großer Dateien oder beim Herunterladen großer Dateien.

  2. Starten Sie nun Ihren Apache-Webdienst neu. Wenn Sie etwas falsch gemacht haben, wird Apache Sie wahrscheinlich darüber informieren, sobald Sie es erneut starten, und Sie können es korrigieren.

    Sudo Service Apache2 Neustart
  1. Wiederholen Sie nun den zuvor durchgeführten 10-Tab-Browser-Trick und prüfen Sie, ob im Apache-Webserver-Fehlerprotokoll Apache-Konfigurationsfehler 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 über die Notwendigkeit von MaxRequestWorkers (und vor kurzem, seit Sie den Webserver neu gestartet haben). Wenn Sie dies auch bei einer optimalen MaxRequestWorkers-Einstellung feststellen, benötigen Sie wahrscheinlich mehr Feuerkraft für Ihre Websites oder Webanwendungen. Betrachten Sie diese Optionen:

  • Verwenden eines CDN für das Herunterladen großer Dateien, Bilder und Skripte.
  • Verwenden eines Caching-Dienstes wie CloudFlare oder anderer.
  • Überarbeiten Ihrer Website- oder Webanwendungsstrategie, um mehrere Webserver zu verwenden, die als eine "Webanwendung" hinter einem Load Balancer fungieren.
  • Hinzufügen von mehr RAM zum Server) und erneutes Durchführen dieser Berechnung.

  1. Nachdem der Apache-Server optimiert wurde, wird die Basislinie optimiert. Sie müssen dies innerhalb von 2-3 Wochen überprüfen und in den Apache-Fehlerprotokollen nach MaxRequestWorker-Problemen suchen. Daraus können Sie eine Entscheidung zur Optimierung treffen (siehe Schritt 10). Sie können Munin auch mit apt unter Ubuntu installieren, die Apache-Leistung im Laufe der Zeit überprüfen und eine Vorstellung von Wachstum zeichnen, bevor Sie entscheiden, ob Sie etwas gegen den Datenverkehr unternehmen müssen, den der Webserver verarbeitet.
46
ServerChecker

Was Sie für MaxRequestWorkers erhöhen können, hängt davon ab, wie viel RAM jeder Ihrer httpd/Apache-Prozesse belegt. Wenn jeder 50 MB belegt (nur eine Zufallszahl auswählen), belegen alle 20 Anforderungsmitarbeiter, die Sie gleichzeitig verwenden (d. H. Gleichzeitige Verbindungen), 1 GB. In diesem Beispiel könnten Sie also höchstens 8 GB * 20 = 160 MaxRequestWorkers haben. Sie können jedoch nicht alle RAM für Apache verbrauchen. Sie müssen einige für andere Dinge reservieren, die dort ausgeführt werden. Auch das Zurücklassen von Ersatz-RAM kann für die Leistung hilfreich sein, da das Betriebssystem es verwendet, um Dinge zwischenzuspeichern und die Leistung zu beschleunigen (obwohl es möglicherweise vorzuziehen ist, keine Verbindungen mehr zu verlieren, da der Server besonders schnell ist Die Site wird langsam angezeigt, während die Browser der Benutzer darauf warten, dass eine Verbindung verfügbar wird, wenn sie alle aufgebraucht sind.

3
g491