Sobes.tech
Middle

Was ist PHP-FPM?

sobes.tech KI

Antwort von AI

PHP-FPM (FastCGI Process Manager) ist ein FastCGI-Prozessmanager für PHP, eine Alternative zum Standard-PHP-FastCGI. Es bietet eine bessere Leistung bei der Verarbeitung von Webanfragen in Hochlastumgebungen. FPM verwaltet einen Pool von PHP-Prozessen, die auf eingehende Anfragen des Webservers warten (z.B. Nginx oder Apache über das Modul mod_proxy_fcgi).

Hauptmerkmale und Vorteile von FPM:

  • Prozess-Pool: FPM erstellt und verwaltet eine Gruppe von PHP-Prozessen. Diese Prozesse können statisch (feste Anzahl), dynamisch (bei Bedarf innerhalb bestimmter Grenzen) oder on-demand (bei Ankunft einer Anfrage erstellt und nach der Verarbeitung beendet) sein. Dies ermöglicht eine effiziente Nutzung der Systemressourcen.
  • Bessere Skalierbarkeit: Durch die Verwaltung des Prozesspools kann FPM mehrere gleichzeitige Anfragen verarbeiten, was für hochbelastete Anwendungen kritisch ist.
  • Prozesstrennung: Jede Anfrage wird von einem eigenen FPM-Prozess verarbeitet, was die Stabilität erhöht. Ein Fehler bei einer Anfrage beeinflusst die anderen nicht.
  • Konfiguration: Ermöglicht eine flexible Einstellung des Verhaltens der Prozesse, z.B. maximale Anfragen pro Prozess, Lebensdauer des Prozesses, Speicherverwaltung.
  • Integration mit Webservern: Lässt sich leicht mit beliebten Webservern über das FastCGI-Protokoll integrieren.

Beispiel für die Konfiguration des Prozesspools in php-fpm.d/www.conf:

; Pool-Name
[www]

; Benutzer und Gruppe, unter denen die Prozesse laufen
user = www-data
group = www-data

; Lauschen auf einem TCP-Socket:
; listen = 127.0.0.1:9000
; ...oder auf einem Unix-Socket:
listen = /run/php/php7.4-fpm.sock

; Prozessmanagement-Methode:
; static - feste Anzahl von Prozessen (`pm.max_children`)
; dynamic - dynamische Anzahl von Prozessen (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - bei Anforderung erstellt (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Anfangsanzahl der Kindprozesse beim Start im dynamischen Modus
pm.start_servers = 5

; Minimale Anzahl der Kindprozesse, die immer laufen
pm.min_servers = 2

; Maximale Anzahl der Kindprozesse im dynamischen und statischen/ondemand Modus
pm.max_children = 15

Ohne FPM müsste der Webserver für jede PHP-Anfrage den Interpreter starten, was sehr ineffizient ist. FPM löst dieses Problem, indem es bereitstehende Prozesse bereitstellt.