Ich habe eine PHP-Anwendung, die Datenbank-intensiv ist und viele Stunden laufen kann, während sie Tausende von externen Netzwerkverbindungen verarbeitet und herstellt.
Es sind zu jedem Zeitpunkt weniger als 3 Benutzer mit dieser Anwendung verbunden.
Welches Apache-MPM ist für diese Arbeitslast am besten geeignet, prefork/mod_php oder worker/mod_fcgid?
Ich verwende Debian Lenny x64, Single-Core, 4 GB RAM.
Antwort1
Bei langsameren Maschinen funktioniert der Worker-Modus besser und erzeugt weniger CPU-Auslastung und -Last.
Bei leistungsstarken Maschinen, die statische Inhalte bereitstellen, ist Prefork MPM etwa 5 % schneller.
Ich empfehle, wenn Sie die Möglichkeit haben, einige Tests mit dem Apache-Benchmark durchzuführen:Apache-Benchmark
Sie können sich auch diesen Benchmark ansehen:Apache Prefork vs. Worker
Ihre Datenbank-Engine ist auf demselben Server installiert?
Antwort2
Apache verfügt über zwei weit verbreitete MPM-Module: das Worker MPM und das Pre-fork MPM. PHP.net empfiehlt die Verwendung des Pre-fork MPM, während die meisten Site-Optimierungsexperten dazu raten, das Threaded Worker MPM zu verwenden. Überraschenderweise zeigten Belastungstests einen relativ geringen Leistungsunterschied – und sicherlich keinen, der Sie zu einer nicht empfohlenen Implementierung auf Ihrem Server drängen würde.
Antwort3
Worker + PHP über FastCGI funktionieren in der Regel gut. In der Vergangenheit haben viele Leute von der Verwendung von mod_php mit jedem Thread-MPM abgeraten (aufgrund einiger Bibliotheken von Drittanbietern, die damit nicht sehr gut funktionierten). Die Verwendung von FastCGI „trennt“ PHP grundsätzlich vom Webserver und vermeidet so dieses Problem.
Ein weiterer Pluspunkt ist, dass die Thread-/Prozessgröße von Apache jetzt kleiner ist, sodass Sie mehr Threads/Prozesse für den Webserver (zur Bereitstellung statischer Inhalte) verwenden und mit wenigen PHP-Prozessen dynamische Teile der Site ausführen können.