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 .
quelle
Antworten:
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.
Stoppen Sie den Apache-Webdienst vorübergehend mit dem folgenden Befehl:
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.
Ö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.
Führen Sie danach schnell den folgenden Befehl aus:
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.
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.
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.
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.
... 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:
quelle
sudo
mü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.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.
quelle
free
Befehl aus, um eine Speicherbasislinie abzurufen. Erhöhen Sie dann die Anzahl der ausgeführten Prozesse, indem Sie MinSpareServers erhöhen, Apache neu starten,free
erneut ausführen und die Berechnung durchführen. Weitere Details und Erklärungen finden Sie unter moreofless.co.uk/apache-memory-usage .