Frage Optimale Werte für die Anweisungen ServerLimit, MaxClients, MaxRequestsPerChild


Ich betreibe eine verkehrsintensive Website mit vielen dynamischen Inhalten, die größtenteils vom Nutzer generiert werden.

Der Server ist ein dedizierter und hat insgesamt 4 Intel Xeon CPU X3210 2,13 GHz Prozessoren. Ich muss zu den optimalen Werten für die Anweisungen des Apache von ServerLimit und MaxClients wissen, bedenkt, dass der Server 4 GB RAM hat und die MySQL-Datenbank auf einem separaten Server ausgeführt wird. Das Panel ist DirectAdmin mit CentOS.

Im Folgenden sind meine aktuellen Anweisungen, aber während Hauptverkehrszeiten mit über 5k Benutzer, ist eine wichtige Verzögerung bemerkt - und es ist nicht ganz MySQL Fehler, weil Seiten scheinen schnell generiert werden (Ich implementierte eine Seite Generation Zeitzähler), aber es ist eine lange Verbindungsverzögerung, bis die Seite zu reagieren beginnt und an den Browser gesendet wird.

<IfModule prefork.c>
    StartServers     800
    MinSpareServers   20
    MaxSpareServers   60
    ServerLimit      900
    MaxClients       900
    MaxRequestsPerChild  2000
</IfModule>
Timeout 90
KeepAlive On
KeepAliveTimeout 5

Ich sollte erwähnen, dass die Überwachung des Servers mit dem oberen Befehl, CPU-Auslastung geht nie über 20% ~ 30% zu Spitzenzeiten. Der MySQL-Server hat zu dieser Zeit auch eine Auslastung von 30 bis 50%, und ich arbeite ständig daran, langsame Abfragen zu reparieren, aber das ist ein anderes Problem. Ich weiß, dass es kein DB-Engpass ist, da statische Seiten auch zu Stoßzeiten sehr lange brauchen.

Irgendwelche Tipps, um diese Werte zu optimieren, werden sehr geschätzt, danke.


27
2017-08-24 19:12


Ursprung




Antworten:


Ihre MaxClients ist viel zu hoch. Wie groß ist die aktuelle Größe Ihres Apache-Prozesses? Multiplizieren Sie das mit 900. Ist das größer als 4 GB? Wenn dies der Fall ist, geht die Maschine wahrscheinlich in einen Tausch über. Ich starte normalerweise mit MaxClients = 2x vCPUs in der Box (grep -c processor / proc / cpuinfo). Was wäre in diesem Fall etwa 8. Dann stellen Sie sicher, dass MaxClients x Apache Prozessgröße nicht über 4 GB ist.

Sie können Ihre MaxClients von dort aus aufrufen, abhängig von der Art der Verbindung, die Ihre Clients haben. (Dial-up-Benutzer müssen mit dem Löffel bedient werden, etc.) Aber stellen Sie sicher, dass Sie sich nie in eine Swapping-Situation begeben.

Stellen Sie dann Ihre Min-, Max- und Start-Server auf MaxClients ein. Sie müssen nicht unbedingt in einer dedizierten Serverumgebung voneinander abweichen.

Dann mach ein paar Tests mit ab (als Gänse-Noten.)


21
2017-08-24 20:41



Aus irgendeinem Grund scheint es, dass ich die Prozessgröße falsch bestimmt habe ... Jetzt sehe ich im oberen Befehl, dass die RESIDENT SIZE Apache-Prozesse von 10 bis 15 MB reichen. Ich habe irgendwo gelesen, dass, da gemeinsame Bibliotheken in dieser Nummer enthalten sind, die "echte" Größe halb so groß ist. In Anbetracht dessen sollte ich berechnen, dass ich 570 Prozesse von je 7 MB Grösse unterbringen kann, findest du das richtig? - andreszs
Ich schlage vor, dass Sie 15 MB für die Berechnungen verwenden und dann beginnen, die Metriken zu überprüfen: # HTTP-Prozess vs. Speicherbenutzung. Dadurch erhalten Sie eine bessere Vorstellung von der Anzahl der MaxClients - hdanniel
Ich habe es auf 400 gesenkt und noch vor der Spitzenzeit hatte das Ergebnis den gegenteiligen Effekt als gewünscht: Jeder niedrigere Wert als das Original erzeugt Timeouts und lange Verzögerungen. Tatsächlich habe ich es jetzt auf 1500 Clients erhöht und die Speicherauslastung liegt jetzt bei 3 GB, während die durchschnittliche CPU-Auslastung bei 8% liegt. Natürlich wird der SQL-Server jetzt mehr belastet und ich muss daran arbeiten. - andreszs
Hier ist mein Befehl htop, 1500 Apache-Prozess und fast 100 Systemprozesse. Dies mit 75% RAM-Nutzung. a.imagehost.org/0011/htop.png  Sollten Sie Ihre Formel überdenken? ;) - andreszs
Aus diesem Grund müssen Sie Tests in Ihrer eigenen Umgebung durchführen. Wir haben HTTP-Beschleuniger vor unseren Apachen, so dass sie keine mobilen Nutzer sind. Ihre Anwendung scheint auch sehr leicht zu sein. Wenn Sie die Last in Ihre DB verschoben haben, die mir sagt, dass mehr dieser Apache-Prozesse Daten im Gegensatz zu "Sitzen" und Warten auf eine Mysql-Verbindung bereitstellen. Was mich dann dazu bringt zu fragen, wie viele Verbindungen Sie zu Ihrer DB zulassen? Übertrifft diese Anzahl Ihre MaxClients? Haben Sie 5.000 gleichzeitige Verbindungen? Wenn ja, möchten Sie vielleicht in etwas wie perlbal vor suchen. - toppledwagon


Sie müssen die durchschnittliche Größe Ihres Apache-Prozesses ermitteln. Mit dieser Nummer und der Gesamtgröße Ihres Arbeitsspeichers können Sie die MaxClients-Direktive berechnen. Denken Sie daran: "Ein Webserver sollte niemals tauschen" (Apache Leistungsoptimierung)

Überwachung mit top oder htop ist in Ordnung, aber Sie benötigen eine bessere Sicht auf alle Statistiken Ihrer Server (CPU, RAM, Disk-I / O, Apache-Anfragen, Mysql langsame Abfragen, etc ...) mit einigen Überwachungs-Tool wie Ganglia oder Munin zu mögliche Engpässe finden.


4
2017-08-24 20:56



Im Moment habe ich nur die Befehle top und htop, und ich kann sowieso nicht alle Informationen verstehen. Dies ist die Aktivität gestern zur Hauptverkehrszeit, es scheint, dass es keinen Austausch gibt; Bitte sag mir, wenn ich falsch liege: Aufgaben: 1043 insgesamt, 2 rennen, 1041 schlafen, 0 gestoppt, 0 Zombie CPU (s): 13,8% us, 1,8% sy, 0,0% ni, 82,1% id, 0,8% wa, 0,0% hi, 1,5% si, 0,0% st Mem: 4138360k insgesamt, 3961276k verwendet, 177084k frei, 75016k Puffer Swap: 2031608k insgesamt, 1484k verwendet, 2030124k frei, 1836600k im Cache - andreszs
Ja, Ihr Server tauscht nicht aus. Ich bevorzuge Real-Life-Metriken, aber wenn Sie möchten, können Sie ein Stresstool wie AB oder httperf verwenden, um zu überprüfen, wie viel Ihr Server verarbeiten kann. Für die Tests ist auf MaxClients zu achten und mit einer niedrigen Anzahl (basierend auf der 15MB Annahme) zu beginnen. - hdanniel


Ich empfehle, mit dem Benchmark-Tool von Apache herumzuspielen. Sie können mit den Werten herumspielen, um sie an Ihren Verkehrsfluss anzupassen, und sehen, welche Art von Antworten Sie erhalten, bis zur durchschnittlichen Ladezeit und ähnlichem. An diesem Punkt können Sie mit den Einstellungen, über die Sie sprechen, experimentieren, um sie zu optimieren. Sie sollten in der Lage sein, die Optimalleistung für jede Leistungsoptimierung mit ab zu erfassen.

Es wäre nicht wirklich vernünftig für mich, über Ihre Einstellungen zu sprechen, aber Sie müssen auch Ihren RAM berücksichtigen, weil es sich anhört, als würden Sie viel RAM mit diesen Einstellungen verbrauchen. Obwohl das nur Spekulation ohne Daten ist. htop gibt Ihnen eine gute visuelle Lesbarkeit Ihrer Ressourcen.

Auch Ihr Lastdurchschnitt könnte viel sagen. Ich bezweifle, dass Ihre Nutzung viel höher ist als Ihre Gesamtanzahl von Kernen von 20-30% CPU, aber es ist ein weiterer Indikator dafür, wie hart Ihr Server tatsächlich funktioniert.


3
2017-08-24 19:35



Das Problem ist, dass ich nicht genug Erfahrung in der Serveradministration habe, also fange an, mit Einstellungen herumzuspielen und die Ergebnisse zu überwachen. Ich habe das ab-Tool nie benutzt, um ehrlich zu sein. Um die Werte zu ändern, muss HTTDP erneut gestartet werden, was für meine Benutzer zu Unannehmlichkeiten führt. Daher möchte ich dies vermeiden. Stellen Sie sich vor, Sie senden eine Nachricht an einen anderen Benutzer und nachdem Sie auf "Senden" geklickt haben, erhalten Sie ein Serververbindungsproblem. Zur CPU-Nutzung, siehe die Informationen aus meinem vorherigen Kommentar: Es geht nicht über 15% zu Spitzenzeiten hinaus. Ich denke, das ist durchaus akzeptabel, wenn man bedenkt, dass ich gestern 6000 Online-Nutzer hatte. - andreszs
Nun, ich würde definitiv nicht wollen, dass Sie das in einer Produktionsumgebung tun. Ich empfehle dies zu Ihrer niedrigsten Verkehrszeit, wenn ein anderer Server (mit sehr ähnlicher, wenn nicht identischer Hardware) getestet werden soll. ab ist ziemlich einfach zu benutzen, aber ich denke definitiv, dass tumpledwagon eine gute Anleitung zur Berechnung Ihrer MaxClients gegeben hat. Sobald Sie aufhören, Swap Space zu verwenden, werden Sie eine deutliche Verbesserung sehen. prüfen httpd.apache.org/docs/2.0/programs/ab.html und cyberciti.biz/tips/ ... für AB - goose