Kako spriječiti da PHP-FPM troši previše RAM-a u Linuxu


Ako ste postavili stog LEMP (Linux, NGINX, MySQL/MariaDB i PHP), onda vjerojatno koristite FastCGI proxy unutar NGINX-a (kao HTTP poslužitelj) za PHP obradu. PHP-FPM (skraćenica od FastCGI Process Manager) široko je korištena i vrlo učinkovita alternativna primjena PHP FastCGI.

Evo korisnih vodiča za postavljanje LEMP Stacka u Linuxu.

  • Kako instalirati LEMP stog s PhpMyAdminom u Ubuntu 20.04
  • Kako instalirati LEMP poslužitelj na CentOS 8
  • Kako instalirati LEMP na poslužitelj Debian 10

Nedavno su sve naše PHP web stranice na jednom od naših LEMP web poslužitelja postale spore i na kraju su prestale reagirati prilikom prijave na poslužitelj. otkrili smo da sustavu nedostaje RAM-a: PHP-FPM je potrošio većinu RAM-a, kao što je naznačeno na sljedećem snimku zaslona (pogledi - alat za nadzor sustava).

$ glances

U ovom ćemo članku pokazati kako spriječiti da PHP-FPM troši previše ili svu vašu sistemsku memoriju (RAM) u Linuxu. Na kraju ovog vodiča naučit ćete kako smanjiti potrošnju PHP-FPM memorije za 50% ili više.

Smanjite upotrebu PHP-FPM memorije

Nakon istraživanja na Internetu, otkrili smo da moramo rekonfigurirati PHP-FPM upravitelj procesa i određene njegove aspekte kako bismo smanjili potrošnju PHP-FPM memorije u konfiguracijskoj datoteci bazena.

Zadani je bazen www, a njegova konfiguracijska datoteka nalazi se na /etc/php-fpm.d/www.conf (na CentOS/RHEL/Fedora) ili /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]

Pronađite sljedeće smjernice i postavite njihovu vrijednost prema vašem slučaju upotrebe. Za direktive koje su komentirane, morate ih komentirati.

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

Objasnimo ukratko gornje smjernice i njihove vrijednosti. Direktiva pm određuje kako će upravitelj procesa kontrolirati broj podređenih procesa. Zadana metoda je dinamička, što znači da se broj djece (podređenih procesa) postavlja dinamički, ovisno o nekim drugim direktivama, uključujući pm.max_children koja definira maksimalan broj djece koja mogu biti istovremeno živa.

Najidealniji upravitelj procesa je shema ondemanda gdje se pri pokretanju ne stvaraju podređeni procesi, već se oni stvaraju na zahtjev. Podređeni procesi su račvasti samo kad se novi zahtjevi povežu na temelju pm.max_children i pm.process_idle_timeout koji definiraju broj sekundi nakon kojih će se proces u mirovanju zaustaviti.

I na kraju, ali ne najmanje važno, moramo postaviti parametar pm.max_requests koji definira broj zahtjeva koje bi svaki podređeni proces trebao izvršiti prije ponovnog mriještenja. Imajte na umu da se ovaj parametar također može koristiti kao rješenje za curenje memorije u knjižnicama nezavisnih proizvođača.

Referenca: Bolji način pokretanja PHP-FPM-a.

Nakon izrade ovih gore navedenih konfiguracija, primijetio sam da je upotreba RAM-a na našem poslužitelju sada u redu. Imate li bilo kakvih razmišljanja vezanih uz ovu temu ili pitanja? Dođite do nas putem obrasca za povratne informacije u nastavku.