Ich habe derzeit einen Apache2-Server mit mpm-preforkund mod_phpauf 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 MaxClientsMB 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 abauf meinem Desktop-Computer die Anforderung der Hauptseite von einem WordPress-Blog.
Wenn ich abmit 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 abmit 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 ablä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 TimeOutEinstellung 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 abeinen Webserver alleine töten kann, indem es die gleichzeitigen Verbindungen zu den Servern herstellt MaxClients.