So stimmen Sie Apache auf Ubuntu 14.04 Server ab

18

Derzeit habe ich auf meinem Apache 2 (Apache 2.4.7 um genau zu sein) unter Ubuntu 14.04 diese 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 8 GB (RAM) großen Amazon-Server, auf dem lediglich ein dreiseitiges Anmeldeformular für einige Google-Anzeigenkampagnen geladen wird.

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

[Tue Apr 21 16: 45: 42.227935 2015] [mpm_prefork: error] [pid 1134] AH00161: Der Server hat die MaxRequestWorkers-Einstellung erreicht. Erwägen Sie, die MaxRequestWorkers-Einstellung zu erhöhen

Wie kann ich beurteilen, wie diese Einstellungen vorgenommen werden?

Ich frage speziell nur, wie man Apache 2.4 einstellt und sonst nichts. Deshalb unterscheidet sich diese Frage von dieser Frage .

ServerChecker
quelle
Mögliches Duplikat von Wie führen Sie Auslastungstests und Kapazitätsplanung für Websites durch?
Jenny D sagt Reinstate Monica
@JennyD Dieser Artikel ist viel zu umfangreich für dieses spezielle Bedürfnis.
ServerChecker
Die Art und Weise, wie Sie diese spezifischen Einstellungen beurteilen, ist das Testen der Last.
Jenny D sagt Reinstate Monica
@JennyD Es ist noch einfacher. Verwenden Sie einfach das Skript ap.sh unter regelmäßigem Laden mehrmals am Tag und durchschnittlich, rechnen Sie über den unten stehenden Link cloudinservice nach und setzen Sie MaxRequestWorkers auf diesen Wert. Beobachten Sie dann die Apache-Protokolle auf Probleme mit MaxRequestWorkers und erhöhen Sie entweder den Arbeitsspeicher, fügen Sie CloudFlare hinzu oder fügen Sie einen anderen Webknoten hinzu. Extrem intensive Belastungstests sind nicht erforderlich.
ServerChecker
Sie könnten eine Antwort schreiben, die Informationen zu diesem Skript und relevante Informationen aus den Links enthält, die Sie in Ihrer eigenen Antwort zu der Frage angegeben haben, auf die ich als mögliches Duplikat hingewiesen habe.
Jenny D sagt Reinstate Monica

Antworten:

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

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

    sudo service apache2 aufhören
  1. Warten Sie 5 Sekunden und führen Sie dann den folgenden Befehl aus, um herauszufinden, wie viel virtueller Speicher auf dem Server verfügbar 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 Apache widmen können, obwohl ich normalerweise 2 GB auf einem bulligeren Server (wie in> 4 GB) oder 1 GB auf einem leichteren Server abziehen möchte. Wenn die freie Spalte angibt, dass ich 13 GB frei habe, würde ich empfehlen, Apache 11 GB zu geben. Das ist eine Grundlinie. Wenn gelegentlich Datenbankprobleme in den Protokollen auftreten (wie etwa dreimal in den Protokollen über einen Zeitraum von drei Tagen), bei denen mehr Speicher benötigt wird, können wir davon ausgehen, dass wir nur 10 GB anstelle von 11 GB zum Spielen 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 jede Registerkarte etwa drei- bis viermal.

  2. Führen Sie danach 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.

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 Sie GB nach Bedarf in MB konvertieren, sodass alle Zahlen in MB angegeben sind. Also multiplizieren Sie entweder 1024 oder dividieren Sie durch 1024, je nachdem, welchen Weg Sie einschlagen müssen.

MaxRequestWorkers = Baseline Free (mit Pufferplatz) / Avg Process Size

Ich hatte zum Beispiel einen 14-GB-Server, aber als Apache gestoppt wurde, zeigte der Server, dass im Leerlauf 1 GB RAM verwendet wurden. Ich stelle dann weitere 1 GB in einem zusätzlichen Pufferplatz für das Betriebssystem bereit, falls es benötigt wird. Das heißt, ich hätte ein Baseline Free von 12GB. Jetzt muss ich es von GB in MB konvertieren, und so multipliziere ich 12 x 1024 und erhalte 12288. Die 12288 MB sind mein Baseline Free-Wert. In meinem Fall habe ich festgestellt, dass die durchschnittliche Prozessgröße 21 MB betrug. Also nehme ich 12288/21 und bekomme ungefähr 585. Jetzt 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 überlegen Sie, ob Sie die folgenden Standardeinstellungen verwenden möchten, indem Sie XXX durch Ihre MaxRequestWorkers-Berechnung ersetzen:


`<IfModule mpm_prefork_module>`
  StartServers                    2
  MinSpareServers                 2
  MaxSpareServers                 5
  MaxRequestWorkers               XXX
  ServerLimit                     XXX
  MaxConnectionsPerChild          0
</IfModule>

Beachten Sie, dass der ServerLimit-Parameter dort möglicherweise nicht angezeigt wird. Füge es hinzu. Dieser Parameter ist standardmäßig 256, wenn er nicht vorhanden ist. Er muss jedoch mit MaxRequestWorkers identisch sein, 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, bis eine Zeitüberschreitung eintritt. Sie müssen auch einen Datei-Upload oder -Download berücksichtigen, z. B. wenn Sie eine Website haben, auf der beispielsweise CSV-Dateien oder andere große Dateien hochgeladen oder heruntergeladen werden können. Außerdem müssen Sie einen ausgelasteten Datenbankserver berücksichtigen und möglicherweise einige Zeit vor dem Seiten-Timeout angeben. Je kleiner Sie diese Variable für das Zeitlimit festlegen, desto mehr Informationen stehen dem Webserver für den Empfang neuer Verbindungen zur Verfügung. Beachten Sie jedoch, dass eine zu niedrige Einstellung dieses Werts zu Problemen mit PHP-Sitzungsvariablen führen kann, jedoch nicht mit sitzungsbasierten Cookies des Browsers. So zum Beispiel, Ein Wert von 300 (5 Minuten) ist möglicherweise gut für einen Webserver, der PHP-Sitzungsvariablen für den Web-App-Workflow anstelle von Browser-Sitzungscookies verwendet. Ein Wert von 45 ist möglicherweise gut für einen Webserver, der nur statische Werbeseiten bereitstellt, aber für einen Server, der häufig PHP-Sitzungsvariablen verwenden muss, schrecklich. Bearbeiten Sie daher den Timeout-Parameter in dieser Datei auf den von Ihnen benötigten Wert. Dies kann einige Tests mit all Ihren Webseiten erfordern, um festzustellen, ob der Wert zu niedrig ist. Es ist jedoch wahrscheinlich eine gute Idee, einen höheren Wert als 300 festzulegen, es sei denn, beim Hochladen großer Dateien oder beim Herunterladen großer Dateien treten Probleme auf. Wäre aber für einen Server furchtbar, der sehr viel PHP-Sitzungsvariablen verwenden muss. Bearbeiten Sie daher den Timeout-Parameter in dieser Datei auf den von Ihnen benötigten Wert. Dies kann einige Tests mit all Ihren Webseiten erfordern, um festzustellen, ob der Wert zu niedrig ist. Es ist jedoch wahrscheinlich eine gute Idee, einen höheren Wert als 300 festzulegen, es sei denn, beim Hochladen großer Dateien oder beim Herunterladen großer Dateien treten Probleme auf. Wäre aber für einen Server furchtbar, der sehr viel PHP-Sitzungsvariablen verwenden muss. Bearbeiten Sie daher den Timeout-Parameter in dieser Datei auf den von Ihnen benötigten Wert. Dies kann einige Tests mit all Ihren Webseiten erfordern, um festzustellen, ob der Wert zu niedrig ist. Es ist jedoch wahrscheinlich eine gute Idee, einen höheren Wert als 300 festzulegen, es sei denn, beim Hochladen großer Dateien oder Herunterladen großer Dateien treten Probleme auf.

  2. Starten Sie jetzt Ihren Apache-Webdienst neu. Wenn Sie etwas falsch gemacht haben, werden Sie von Apache wahrscheinlich in dem Moment darüber informiert, in dem Sie es erneut starten, und Sie können es korrigieren.

    sudo service apache2 neu starten
  1. Wiederholen Sie nun den 10-Tab-Browser-Trick, den Sie zuvor ausgeführt haben, und überprüfen Sie, ob im Apache-Webserver-Fehlerprotokoll Apache-Konfigurationsfehler auftreten:
    sudo tail -f /var/log/apache2/error.log

... drücken Sie STRG + C, wenn Sie möchten.

Suchen Sie nach einer Beschwerde über die Notwendigkeit von MaxRequestWorkers (und seitdem 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 Skripts.
  • Verwenden eines Caching-Dienstes wie CloudFlare oder eines anderen.
  • Erneute Optimierung Ihrer Website- oder Webanwendungsstrategie, um mehrere Webserver zu verwenden, die als eine "Web-App" hinter einem Lastenausgleich fungieren.
  • Fügen Sie dem Server mehr RAM hinzu, und wiederholen Sie die Berechnung.

  1. Jetzt, da der Apache-Server optimiert ist, ist er in gewisser Weise als Baseline optimiert. Sie müssen dies im Laufe 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 mit apt auch unter Ubuntu installieren und die Apache-Leistung über einen längeren Zeitraum hinweg betrachten und eine Idee des Wachstums aufzeichnen, bevor Sie sich entscheiden, etwas gegen den Datenverkehr zu unternehmen, den der Webserver verarbeitet.
ServerChecker
quelle
„Während diese Links die Frage beantworten können, ist es besser, die wesentlichen Teile der Antwort hier einzuschließen und den Link als Referenz bereitzustellen. Nur-Link-Antworten können ungültig werden, wenn sich die verknüpfte Seite ändert. “
Jenny D sagt Reinstate Monica,
@ JennyD Guter Punkt! Ich werde das machen.
ServerChecker
@Moderator Ich benötige Hilfe bei der Formatierung dieser Antwort. Schritt 7 sollte eine Conf-Datei mit Einzügen sein. Schritt 11 sollte nicht eingerückt sein. Codebefehle, die mit beginnen, sudomüssen als Code und nicht als normaler Text angezeigt werden. Ich habe mich an die Dokumentation zur Formatierung gehalten, habe mich hier aber immer noch schwer getan.
ServerChecker
1
Ich habe getan, was ich konnte - Markdown macht gemischte Listen und Code nicht sehr gut, aber ich denke, ich habe es trotzdem geschafft, es ein bisschen besser zu machen.
Jenny D sagt Reinstate Monica
Für Centos Neulinge wie ich: ps -lyU Apache anstelle von ps -ylC Apache2
user1928596
3

Auf was Sie MaxRequestWorkers auslösen können, hängt davon ab, wie viel RAM jeder Ihrer httpd / apache-Prozesse beansprucht. Wenn jeder 50 MB belegt (nur eine zufällige Zahl auswählt), belegen alle 20 auf einmal genutzten Anforderungs-Worker (dh gleichzeitige Verbindungen) 1 GB. In diesem Beispiel könnten Sie also höchstens 8 GB * 20 = 160 MaxRequestWorkers haben. Sie können jedoch nicht den gesamten Arbeitsspeicher für Apache belegen. Sie müssen einige für andere Dinge reservieren, die dort ausgeführt werden. Das Belassen eines freien Arbeitsspeichers kann für die Leistung hilfreich sein, da das Betriebssystem ihn zum Zwischenspeichern von Dingen und Beschleunigen der Leistung verwendet (obwohl es möglicherweise vorzuziehen ist, keine Verbindungen zu verlieren, während der Server besonders schnell ist, da die Site langsam erscheint Die Browser der Benutzer warten darauf, dass eine Verbindung verfügbar wird, wenn sie alle aufgebraucht sind.

g491
quelle
Was ist ein guter Weg, um dies zu profilieren? Welche Befehle kann ich eingeben, um zu sehen, wie viel RAM jeder Apache-Prozess unter Last verwendet? Wir brauchen auch RAM-Raum für MySQL (eine WordPress-Site) und normale Systemprozesse.
ServerChecker
Sehen Sie, wie viele Prozesse ausgeführt werden, und führen Sie den freeBefehl aus, um eine Speicherbasislinie abzurufen. Erhöhen Sie dann die Anzahl der ausgeführten Prozesse, indem Sie MinSpareServers erhöhen, Apache neu starten, freeerneut ausführen und die Berechnung durchführen. Weitere Details und Erklärungen finden Sie unter moreofless.co.uk/apache-memory-usage .
G491
Ich habe jetzt gelernt, dass es einen superschnellen Weg gibt, dies zu tun. Es ist im cloudinservice.com-Link in meiner Antwort unten aufgeführt. Der Befehl ist ap.sh, den jemand herausgefunden hat. Außerdem habe ich erfahren, dass MaxClients jetzt in Apache 2.4+ in MaxRequestWorkers umbenannt wurde.
ServerChecker