Was ist der Unterschied zwischen fastcgi und fpm?

117

Ich versuche, PHP mit Fpm auf Macports zu installieren. Ich habe irgendwo gelesen, dass fpm FastCGI-Prozessmanager bedeutet. Bedeutet das, dass fastcgi und fpm gleich sind? Wenn sie gleich sind, warum haben wir dann zwei verschiedene Macport-Varianten für PHP, nämlich "php5 + fastcgi" und "php5 + fpm"?

Deepan Chakravarthy
quelle

Antworten:

94

FPM ist ein Prozessmanager zur Verwaltung der FastCGI SAPI (Server API) in PHP.

Grundsätzlich ersetzt es die Notwendigkeit für etwas wie SpawnFCGI . Es erzeugt die FastCGI-Kinder adaptiv (was bedeutet, dass mehr gestartet wird, wenn die aktuelle Last dies erfordert).

Ansonsten gibt es keinen großen Betriebsunterschied zwischen ihm und FastCGI (die Anforderungspipeline vom Beginn der Anforderung bis zum Ende ist dieselbe). Es ist nur da, um die Implementierung zu vereinfachen.

ircmaxell
quelle
8
Ein wesentlicher Vorteil von php-fpm ist, dass ein APC-Cache von mehreren Prozessen gemeinsam genutzt werden kann. Mit fcgid ist der APC-Cache pro Prozess. Die Verwendung von fpm kann zu erheblichen Speichereinsparungen führen, sodass Sie diesen gespeicherten Speicher verwenden können, um mehr Prozesse zu erzeugen und mehr Datenverkehr bereitzustellen.
Cam8001
25
@ cam8001: das stimmt überhaupt nicht. Sie können festlegen, SpawnFCGIwie viele Prozesse erzeugt werden sollen und wie viele PHP-Kinder pro Prozess vorhanden sind. Das Laichen eines PHP-Prozesses mit 100 Kindern ist also dasselbe wie das Verwenden von FPM mit 100 Kindern ... Das Gegenteil ist jedoch der Fall. Wenn FPM getötet wird (Segfault, was auch immer), stirbt Ihr gesamter Arbeiter. Wenn in SpawnFCGI einer der Prozesse stirbt, kann der Rest am Leben bleiben ... Es ist also nicht klar, ob einer besser als der andere ist. Unterschiedliche Ansätze. FPM wird nicht aus technischen Gründen empfohlen, sondern weil es entlang des Seitenkerns (tatsächlich darin)
gewartet wird
56

Was Anthony sagt, ist absolut richtig, aber ich möchte hinzufügen, dass Ihre Erfahrung wahrscheinlich eine viel bessere Leistung und Effizienz zeigen wird (nicht aufgrund von fpm-vs-, fcgisondern eher aufgrund der Implementierung Ihrer httpd).

Zum Beispiel hatte ich eine Quad-Core-Maschine, die gut lief lighttpdund fcgisummte. Ich habe ein Upgrade auf einen 16-Kern-Computer durchgeführt, um mit dem Wachstum fertig zu werden, und zwei Dinge sind explodiert: RAM-Auslastung und Segfaults. Ich habe lighttpdalle 30 Minuten einen Neustart durchgeführt , um die Website auf dem neuesten Stand zu halten.

Ich wechselte zu PHP-Fpm und Nginx und die RAM-Auslastung ging von> 20 GB auf 2 GB zurück. Segfaults verschwanden ebenfalls. Nachdem ich einige Nachforschungen angestellt hatte, stellte ich fest, dass lighttpd und fcgi auf Multi-Core-Computern unter Last nicht gut miteinander auskommen und in bestimmten Fällen auch Probleme mit Speicherverlusten haben.

Liegt das daran php-fpm, besser zu sein als fcgi? Nicht ganz, aber wie Sie php-fpmsich einhaken, scheint viel effizienter zu sein, als wie Sie über dienen fcgi.

Raumschlüssel
quelle
8
Gibt es solche Probleme bis etwa (April 2017)?
Lord Loh.
1
Alle Aktualisierungen der von Ihnen verwendeten Version von lighttpd und fpm werden empfohlen. Aktualisierungen der genannten Probleme, die weiterhin auftreten (Juni 2018), sind auch für die Community hilfreich.
Ima
0

Das Ausführen von PHP als CGI bedeutet, dass Sie Ihrem Webserver im Grunde den Speicherort der ausführbaren PHP-Datei mitteilen und der Server diese ausführbare Datei ausführt

wohingegen

PHP FastCGI Process Manager (PHP-FPM) ist ein alternativer FastCGI-Daemon für PHP, mit dem eine Website mit hohen Belastungen umgehen kann. PHP-FPM verwaltet Pools (Mitarbeiter, die auf PHP-Anfragen antworten können), um dies zu erreichen. PHP-FPM ist für Mehrbenutzer-PHP-Umgebungen schneller als herkömmliche CGI-basierte Methoden wie SUPHP

Beide haben jedoch Vor- und Nachteile, und man sollte nach ihrem spezifischen Anwendungsfall wählen.

Ich fand Informationen zu diesem Link für fastcgi vs fpm sehr hilfreich bei der Auswahl des in meinem Szenario zu verwendenden Handlers .

pulkit8
quelle