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.