Ich habe derzeit einen Apache2-Server mit mpm-prefork
und mod_php
auf einem OpenVZ-VPS mit 512 MB realem / 1024 MB Burstable RAM (kein Swap). Nachdem ich einige Tests ausgeführt hatte, stellte ich fest, dass die maximale Prozessgröße, die Apache erhält, 23 MaxClients
MB beträgt. Daher habe ich 25 festgelegt (23 MB x 25 = 575 MB, für mich in Ordnung). Ich beschloss, einige Auslastungstests auf meinem Server durchzuführen, und die Ergebnisse ließen mich verwirrt.
Ich verwende ab
auf meinem Desktop-Computer die Anforderung der Hauptseite von einem WordPress-Blog.
Wenn ich ab
mit 24 gleichzeitigen Verbindungen arbeite, scheint alles in Ordnung zu sein. Sicher, die CPU steigt, der freie Arbeitsspeicher sinkt und das Ergebnis ist eine Antwortzeit von ca. 2-3 Sekunden pro Anforderung.
Wenn ich jedoch ab
mit 25 gleichzeitigen Verbindungen (meinem Serverlimit) arbeite, bleibt Apache nach ein paar Sekunden hängen. Es beginnt mit der Verarbeitung der Anforderungen, reagiert dann nicht mehr, die CPU kehrt zu 100% in den Leerlauf zurück und ab
läuft ab. Das Apache-Protokoll gibt an, dass es erreicht wurde MaxClients
.
In diesem Fall hält sich Apache mit 25 laufenden Prozessen auf dem Laufenden (sie sind alle in "W", wenn ich den Serverstatus überprüfe) und erst nach der TimeOut
Einstellung beginnen die Prozesse zu sterben und der Server reagiert erneut (in meinem Fall ist er festgelegt bis 45).
Meine Frage: Ist das erwartetes Verhalten? Warum stirbt Apache nur, wenn es erreicht MaxClients
? Wenn es mit 24 Verbindungen funktioniert, sollte es nicht mit 25 funktionieren. Nehmen Sie sich vielleicht mehr Zeit, um auf jede Anfrage zu antworten und den Rest in die Warteschlange zu stellen.
Es klingt für mich etwas seltsam, dass jedes laufende Kind ab
einen Webserver alleine töten kann, indem es die gleichzeitigen Verbindungen zu den Servern herstellt MaxClients
.