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.