Kaip neleisti PHP-FPM sunaudoti per daug operatyviosios atminties sistemoje „Linux“


Jei dislokavote LEMP („Linux“, „NGINX“, „MySQL/MariaDB“ ir PHP) kaminą, tikriausiai naudojate „FastCGI“ tarpinį serverį NGINX (kaip HTTP serverį), kad apdorotumėte PHP. PHP-FPM („FastCGI Process Manager“ akronimas) yra plačiai naudojamas ir efektyvus alternatyvus PHP FastCGI diegimas.

Čia pateikiami naudingi vadovai, kaip nustatyti „LEMP Stack“ sistemoje „Linux“.

  • Kaip įdiegti „LEMP Stack“ su „PhpMyAdmin“ „Ubuntu 20.04“
  • Kaip įdiegti LEMP serverį „CentOS 8“
  • Kaip įdiegti LEMP „Debian 10 Server“

Neseniai visos PHP svetainės, esančios viename iš mūsų LEMP žiniatinklio serverių, tapo lėtos ir galiausiai nebeatsakė prisijungdami prie serverio. mes sužinojome, kad sistemoje yra mažai RAM: PHP-FPM sunaudojo didžiąją dalį RAM, kaip nurodyta šiame ekrane (žvilgsniai - sistemos stebėjimo įrankis).

$ glances

Šiame straipsnyje mes parodysime, kaip užkirsti kelią PHP-FPM sunaudoti per daug ar visos jūsų sistemos atminties (RAM) sistemoje „Linux“. Šio vadovo pabaigoje sužinosite, kaip sumažinti PHP-FPM atminties suvartojimą 50% ar daugiau.

Sumažinkite PHP-FPM atminties naudojimą

Atlikę keletą tyrimų internete, mes sužinojome, kad mums reikia iš naujo sukonfigūruoti PHP-FPM proceso tvarkyklę ir tam tikrus jo aspektus, kad sumažintume PHP-FPM atminties sąnaudas baseino konfigūracijos faile.

Numatytasis telkinys yra www, o jo konfigūracijos failas yra /etc/php-fpm.d/www.conf („CentOS/RHEL/Fedora“) arba /etc/php/7.4/fpm/pool.d/www.conf ( 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]

Suraskite šias direktyvas ir nustatykite jų vertę, kad atitiktų jūsų naudojimo atvejį. Dėl komentuojamų direktyvų turite jas nekomentuoti.

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

Trumpai paaiškinkime minėtas direktyvas ir jų vertybes. Pm direktyva nustato, kaip proceso vadovas kontroliuos vaikų procesų skaičių. Numatytasis metodas yra dinaminis, o tai reiškia, kad vaikų skaičius (vaiko procesai) nustatomas dinamiškai, atsižvelgiant į kai kurias kitas direktyvas, įskaitant „pm.max_children“, kuris apibrėžia maksimalų vaikų, kurie gali būti gyvi tuo pačiu metu, skaičių.

Idealiausias procesų valdytojas yra užsakomoji schema, kai paleidimo metu nėra sukuriami jokie vaiko procesai, tačiau jie yra pagimdyti pagal pareikalavimą. Antriniai procesai yra išsišakoję tik tada, kai bus sujungtos naujos užklausos pagal pm.max_children ir pm.process_idle_timeout, kurios apibrėžia sekundžių skaičių, po kurio tuščiasis procesas bus užmuštas.

Paskutinis, bet ne mažiau svarbus dalykas, mes turime nustatyti parametrą pm.max_requests, kuris apibrėžia prašymų, kuriuos kiekvienas vaikas turi vykdyti, prieš pakartotinai neršiant, skaičių. Atminkite, kad šis parametras taip pat gali būti naudojamas kaip atminties nutekėjimo trečiųjų šalių bibliotekose sprendimas.

Nuoroda: geresnis būdas paleisti PHP-FPM.

Atlikęs šias aukščiau pateiktas konfigūracijas pastebėjau, kad RAM naudojimas mūsų serveryje yra gerai. Ar turite kokių nors minčių, susijusių su šia tema, ar klausimų? Susisiekite su mumis naudodamiesi žemiau esančia atsiliepimų forma.