Sobes.tech
Middle

Mi az a PHP-FPM?

sobes.tech MI

Válasz az MI-től

PHP-FPM (FastCGI Process Manager) a PHP-hez egy FastCGI folyamatkezelő, alternatívája a szokásos PHP FastCGI-nak. Jobb teljesítményt nyújt magas terhelésű környezetekben a webkérések feldolgozásában. Az FPM egy PHP folyamatokból álló poolt kezel, amelyek várakoznak a web szerver (pl. Nginx vagy Apache mod_proxy_fcgi modul) bejövő kéréseire.

Az FPM fő jellemzői és előnyei:

  • Folyamat pool: Az FPM létrehoz és kezel egy PHP folyamatokból álló csoportot. Ezek a folyamatok lehetnek statikusak (állandó szám), dinamikusak (szükség szerint, meghatározott határok között), vagy kérésre (kérés érkezésekor jönnek létre, és a feldolgozás után törlődnek). Ez hatékony erőforrás-használatot tesz lehetővé.
  • Jobb skálázhatóság: A folyamat pool kezelése révén az FPM több egyidejű kérést képes kezelni, ami kritikus magas terhelésű alkalmazásoknál.
  • Folyamatok elkülönítése: Minden kérés külön FPM folyamat által kerül feldolgozásra, növelve a stabilitást. Egy kérés hibája nem befolyásolja a többit.
  • Konfigurálhatóság: Rugalmasan beállítható a folyamatok viselkedése, például maximális kérés szám folyamatonként, folyamat életideje, memória kezelés.
  • Web szerverekkel való integráció: Könnyen integrálható népszerű web szerverekkel a FastCGI protokollon keresztül.

Példa a folyamat pool konfigurációjára a php-fpm.d/www.conf fájlban:

; Pool neve
[www]

; Felhasználó és csoport, amely alatt a folyamatok futnak
user = www-data
group = www-data

; Hallgatás TCP socket-on:
; listen = 127.0.0.1:9000
; ...vagy Unix socket-on:
listen = /run/php/php7.4-fpm.sock

; Folyamatkezelési módszer:
; static - fix számú folyamat (`pm.max_children`)
; dynamic - dinamikus számú folyamat (`pm.start_servers`, `pm.min_servers`, `pm.max_servers`)
; ondemand - kérésre jön létre (`pm.process_idle_timeout`, `pm.max_children`)
pm = dynamic

; Kezdeti gyermek folyamatok száma dinamikus módban
pm.start_servers = 5

; Minősített gyermek folyamatok száma, amelyek mindig futnak
pm.min_servers = 2

; Maximális gyermek folyamatok száma dinamikus és static/ondemand módban
pm.max_children = 15

FPM nélkül a web szerver minden PHP kéréshez elindítaná a PHP értelmezőt, ami nagyon nem hatékony. Az FPM ezt a problémát úgy oldja meg, hogy készen álló folyamatokat tart fenn.