Sobes.tech
Middle

Wat is PHP-FPM?

sobes.tech AI

Antwoord van AI

PHP-FPM (FastCGI Process Manager) is een FastCGI-processenbeheerder voor PHP, alternatief voor de standaard PHP FastCGI. Het biedt betere prestaties bij het verwerken van webverzoeken in omgevingen met hoge belasting. FPM beheert een pool van PHP-processen die wachten op inkomende verzoeken van de webserver (bijvoorbeeld Nginx of Apache via de mod_proxy_fcgi-module).

Belangrijkste kenmerken en voordelen van FPM:

  • Procespool: FPM creëert en beheert een set PHP-processen. Deze processen kunnen statisch (vast aantal), dynamisch (naar behoefte binnen bepaalde limieten) of on-demand (bij ontvangst van een verzoek aangemaakt en na verwerking verwijderd) zijn. Dit zorgt voor efficiënt gebruik van systeembronnen.
  • Betere schaalbaarheid: Door het beheer van de procespool kan FPM meerdere gelijktijdige verzoeken verwerken, wat cruciaal is voor high-load applicaties.
  • Procesisolatie: Elk verzoek wordt afgehandeld door een apart FPM-proces, wat de stabiliteit verhoogt. Een fout in één verzoek beïnvloedt de anderen niet.
  • Configuratie: Flexibel instelbaar gedrag van processen, zoals het maximale aantal verzoeken per proces, levensduur van het proces, geheugenbeheer.
  • Integratie met webservers: Eenvoudig te integreren met populaire webservers via het FastCGI-protocol.

Voorbeeld van een procespoolconfiguratie in php-fpm.d/www.conf:

; Poolnaam
[www]

; Gebruiker en groep waaronder de processen draaien
user = www-data
group = www-data

; Luisteren op een TCP-socket:
; listen = 127.0.0.1:9000
; ...of op een Unix-socket:
listen = /run/php/php7.4-fpm.sock

; Procesbeheer-methode:
; static - vast aantal processen (`pm.max_children`)
; dynamic - dynamisch aantal processen (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - aangemaakt op verzoek (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Initiële aantal kindprocessen bij het starten in dynamische modus
pm.start_servers = 5

; Minimaal aantal kindprocessen dat altijd actief is in dynamische modus
pm.min_servers = 2

; Maximaal aantal kindprocessen in dynamische en static/ondemand modi
pm.max_children = 15

Zonder FPM zou de webserver voor elke PHP-verzoek de PHP-interpreter moeten starten, wat zeer inefficiënt zou zijn. FPM lost dit probleem op door klaarstaande processen te behouden.