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


Ako ste implementirali LEMP (Linux, NGINX, MySQL/MariaDB i PHP) stek, onda vjerovatno koristite FastCGI proxy u okviru NGINX (kao HTTP server), za PHP obradu. PHP-FPM (akronim od FastCGI Process Manager) je široko korišćena alternativna implementacija PHP FastCGI visokih performansi.

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

  • Kako instalirati LEMP Stack sa PhpMyAdmin u Ubuntu 20.04
  • Kako instalirati LEMP server na CentOS 8
  • Kako instalirati LEMP na Debian 10 poslužitelj

Nedavno su sve naše PHP web stranice na jednom od naših LEMP web servera postale spore i na kraju su prestale reagirati na prijavu na server. otkrili smo da je sistemu ponestalo RAM-a: PHP-FPM je potrošio većinu RAM-a, kao što je prikazano na sljedećem snimku ekrana (pogledi – alat za nadzor sistema).

glances

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

Smanjite upotrebu PHP-FPM memorije

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

Zadani bazen je www i njegova konfiguracijska datoteka se nalazi 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 direktive i postavite njihovu vrijednost tako da odgovaraju vašem slučaju upotrebe. Za direktive koje su komentirane, morate ih dekomentirati.

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

Hajde da ukratko objasnimo gore navedene direktive i njihove vrijednosti. Direktiva pm određuje kako će upravitelj procesa kontrolirati broj podređenih procesa. Zadana metoda je dinamički, što znači da se broj djece (procesi djece) postavlja dinamički ovisno o nekim drugim direktivama uključujući pm.max_children koja definira maksimalan broj djece koja može biti živ u isto vrijeme.

Najidealniji menadžer procesa je shema ondemand gdje se pri pokretanju ne kreiraju podređeni procesi, već se pokreću na zahtjev. Podređeni procesi se račvaju samo kada se novi zahtjevi povežu na osnovu pm.max_children i pm.process_idle_timeout koji definira broj sekundi nakon kojih će proces u mirovanju biti prekinut.

Na kraju, ali ne i najmanje važno, moramo postaviti parametar pm.max_requests koji definira broj zahtjeva koje svaki podređeni proces treba izvršiti prije ponovnog pokretanja. Imajte na umu da se ovaj parametar može koristiti i kao zaobilazno rješenje za curenje memorije u bibliotekama treće strane.

Nakon što sam napravio ove gore navedene konfiguracije, primijetio sam da je upotreba RAM-a sada u redu na našem serveru. Imate li neka razmišljanja o ovoj temi ili pitanja za podijeliti? Kontaktirajte nas putem obrasca za povratne informacije u nastavku.