Kako preprečiti, da bi PHP-FPM porabil preveč RAM-a v Linuxu


Če ste postavili sklad LEMP (Linux, NGINX, MySQL/MariaDB in PHP), potem verjetno uporabljate proxy FastCGI znotraj NGINX (kot strežnik HTTP) za obdelavo PHP. PHP-FPM (kratica FastCGI Process Manager) je široko uporabljena in visoko zmogljiva alternativna izvedba PHP FastCGI.

Tu so koristni vodniki za nastavitev LEMP Stack v Linuxu.

  • Kako namestiti LEMP Stack s PhpMyAdmin v Ubuntu 20.04
  • Kako namestiti strežnik LEMP na CentOS 8
  • Kako namestiti LEMP na strežnik Debian 10

V zadnjem času so vsa naša spletna mesta PHP na enem od naših spletnih strežnikov LEMP postala počasna in se sčasoma prenehala odzivati ob prijavi v strežnik. ugotovili smo, da v sistemu primanjkuje RAM-a: PHP-FPM je porabil večino RAM-a, kot je prikazano na naslednjem posnetku zaslona (pogledi - orodje za nadzor sistema).

$ glances

V tem članku bomo pokazali, kako preprečiti, da bi PHP-FPM porabil preveč ali ves sistemski pomnilnik (RAM) v Linuxu. Na koncu tega vodnika boste izvedeli, kako zmanjšati porabo pomnilnika PHP-FPM za 50% ali več.

Zmanjšajte porabo pomnilnika PHP-FPM

Po nekaj raziskavah na internetu smo ugotovili, da moramo znova konfigurirati upravitelja procesov PHP-FPM in nekatere njegove vidike, da zmanjšamo porabo pomnilnika PHP-FPM v konfiguracijski datoteki bazena.

Privzeti bazen je www, njegova konfiguracijska datoteka pa se nahaja na /etc/php-fpm.d/www.conf (na CentOS/RHEL/Fedora) ali /etc/php/7.4/fpm/pool.d/www.conf ( na Ubuntu/Debian/Mint).

$ sudo vim /etc/php-fpm.d/www.conf             [On CentOS/RHEL/Fedora]
$ sudo vim /etc/php/7.4/fpm/pool.d/www.conf    [On Ubuntu/Debian/Mint]

Poiščite naslednje smernice in nastavite njihovo vrednost, ki ustreza vašemu primeru uporabe. Za direktive, ki so komentirane, jih morate komentirati.

pm = ondemand
pm.max_children = 80
pm.process_idle_timeout = 10s
pm.max_requests = 200

Na kratko razložimo zgornje smernice in njihove vrednote. Direktiva pm določa, kako bo upravitelj procesov nadzoroval število podrejenih procesov. Privzeta metoda je dinamična, kar pomeni, da se število podrejenih (podrejenih procesov) nastavi dinamično, odvisno od nekaterih drugih direktiv, vključno z pm.max_children, ki določa največje število otrok, ki so lahko hkrati živi.

Najbolj idealen upravitelj procesov je shema ondemand, pri kateri se ob zagonu ne ustvarijo podrejeni procesi, ki pa se ustvarijo na zahtevo. Otroški procesi so razcepljeni samo, ko se nove zahteve povežejo na podlagi pm.max_children in pm.process_idle_timeout, ki določata število sekund, po katerih bo nedejaven postopek umorjen.

Nenazadnje moramo nastaviti parameter pm.max_requests, ki določa število zahtev, ki jih mora vsak podrejeni postopek izvršiti pred ponovno drstitvijo. Upoštevajte, da lahko ta parameter uporabite tudi kot rešitev za uhajanje pomnilnika v knjižnicah drugih proizvajalcev.

Referenca: boljši način za zagon PHP-FPM.

Po izvedbi teh zgornjih konfiguracij sem opazil, da je uporaba RAM-a v našem strežniku zdaj v redu. Imate kakšne misli, ki bi jih delili v zvezi s to temo ali vprašanja? Obrnite se na nas preko spodnjega obrazca za povratne informacije.