Apache MPMs - Worker vs Prefork

13

Ich versuche herauszufinden, welches das beste Apache MPM ist, das ich auf meinem VPS installieren kann. Ich habe einige Benchmarks gesehen und MPM Worker scheint eine bessere Leistung als Prefork zu erbringen, aber aus irgendeinem Grund scheint jeder Prefork over Worker für PHP-Setups zu empfehlen.

Liegt das nur daran, dass einige PHP-Funktionen nicht threadsicher sind? Nur setlocale()in den Sinn kommt, aber ich werde auf jeder Instanz das gleiche Gebietsschema verwenden, damit ich nicht denke, dass das ein Problem sein wird. Mein VPS hat wenig Gedächtnis und ich bin der Meinung, dass das Worker-MPM besser zu meinen Bedürfnissen passt, bin mir jedoch nicht sicher.

Kann mir jemand dabei helfen, mich zu entscheiden? Vielen Dank!


PS: Ich habe mir auch Nginx und Lighttpd angeschaut. nginx scheint fantastisch, aber ich versuche, das Kompilieren aus dem Quellcode zu vermeiden, und ich verstehe immer noch nicht ganz, wofür PHP-Fpm gedacht ist. In Bezug auf lighttpd war es unglaublich einfach, PHP / FCGI damit einzurichten, aber ich habe gehört, dass es Speicherverluste gibt. Ist das noch wahr?

Alix Axel
quelle
2
Das Problem ist, dass, während das Kern-PHP jetzt thread-sicher sein soll, wenn es um Erweiterungen geht, alle Wetten aus sind.
Mattdm

Antworten:

12

Sie sollten prefork verwenden, wenn Sie apache + mod_php verwenden. In den FAQ wird der Grund dafür klar umrissen:

http://www.php.net/manual/en/faq.installation.php#faq.installation.apache2

Warum sollte ich Apache2 nicht mit einem Thread-MPM in einer Produktionsumgebung verwenden?

PHP ist Leim. Es ist der Klebstoff, der zum Erstellen cooler Webanwendungen verwendet wird, indem Dutzende von Bibliotheken von Drittanbietern zusammengefügt werden und alles über eine intuitive und einfach zu erlernende Sprachoberfläche als eine zusammenhängende Einheit angezeigt wird. Die Flexibilität und Leistungsfähigkeit von PHP beruht auf der Stabilität und Robustheit der zugrunde liegenden Plattform. Es benötigt ein funktionierendes Betriebssystem, einen funktionierenden Webserver und Bibliotheken von Drittanbietern, um zusammenzukleben. Wenn eines dieser Probleme nicht mehr funktioniert, benötigt PHP Methoden, um die Probleme zu identifizieren und schnell zu beheben. Wenn Sie das zugrunde liegende Framework komplexer machen, indem Sie keine vollständig getrennten Ausführungsthreads, vollständig getrennte Speichersegmente und eine starke Sandbox für jede Anforderung zum Spielen haben, werden weitere Schwachstellen in das PHP-System eingeführt.

nginx + php-fpm ist auch eine hervorragende Möglichkeit, um PHP-Anwendungen auszuführen. nginx bietet native Unterstützung für FastCGI und php-fpm ist eine der besten Möglichkeiten, um PHP in einer FastCGI-Umgebung auszuführen. Siehe die PHP-Dokumentation hier:

http://www.php.net/manual/en/install.fpm.php

dialt0ne
quelle
In Bezug auf Apache MPMs denke ich, dass ich es verstanden habe, ist Prefork der richtige Weg. Aufgrund des hohen Speicherverbrauchs von Apache neige ich zu einem Nginx- oder Lighttpd-Setup. Lighttpd und PHP-FCGI funktionieren bei der Installation mit aptitude ohne Probleme, ich bin mir jedoch nicht sicher, ob die Speicherlecks, über die alle in den letzten Jahren gesprochen haben, noch vorhanden sind. Ich habe auch gelesen, dass Nginx eine geringere CPU-Auslastung hat, aber ich kann es nicht dazu bringen, mit PHP-CGI zu arbeiten, geschweige denn mit PHP-FPM. Gibt es eine einfache Möglichkeit, dies mit dem Paket-Manager auf Ubuntu zu installieren? Empfehlen Sie eine Lektüre zu diesem Thema?
Alix Axel
Mit aktiviertem Multiversum war ich in der Lage, "Nginx zu installieren" und es läuft wie ein Champion - ich verwende es auf Produktionssystemen. Es gibt hier ein gutes Startpunktbeispiel, howtoforge.com/… aber wie immer YMMV.
dialt0ne
Ich kann nginx mit apt installieren, aber ich kann es nicht an den PHP-Interpreter binden. Der von Ihnen angegebene Link enthält eine neue Quelle, die das php5-fpmPaket zu enthalten scheint . Ich werde es ausprobieren.
Alix Axel
Dieser Link könnte besser sein. Howtoforge.com/… Ich verwende das brianmercer-Repo für meine Produktionssysteme für PHP5-FPM.
dialt0ne