Kuidas vältida PHP-FPM-i Linuxis liiga palju RAM-i tarbimist


Kui olete juurutanud LEMP-i (Linux, NGINX, MySQL/MariaDB ja PHP) virna, siis kasutate PHP töötlemiseks tõenäoliselt FastCGI-puhverserverit NGINX-is (HTTP-serverina). PHP-FPM (FastCGI protsessihalduri lühend) on laialt kasutatav ja suure jõudlusega alternatiivne PHP FastCGI juurutus.

Siin on kasulikud juhised LEMP Stacki seadistamiseks Linuxis.

  • Kuidas installida LEMP Stack koos PhpMyAdminiga Ubuntu 20.04
  • Kuidas LEMP-serverit CentOS 8-le installida
  • Kuidas installida LEMP Debiani 10 serverisse

Hiljuti muutusid meie kõigi PHP-veebisaidid ühes meie LEMP-veebiserverist aeglaseks ja lõpetasid lõpuks serverisse sisselogimisel reageerimise. avastasime, et süsteemil on vähe RAM-i: PHP-FPM oli tarbinud suurema osa RAM-ist, nagu on näidatud järgmises ekraanipildis (pilgud - süsteemi jälgimise tööriist).

$ glances

Selles artiklis näitame, kuidas takistada PHP-FPM-i Linuxis liiga palju või kogu teie süsteemimälu (RAM) tarbimist. Selle juhendi lõpus saate teada, kuidas vähendada PHP-FPM-i mälu tarbimist 50% või rohkem.

Vähendage PHP-FPM-i mälukasutust

Pärast Interneti-uuringute tegemist avastasime, et peame PHP-FPM-i protsessihalduri ja selle teatud aspektid ümber seadistama, et vähendada PHP-FPM-i mälutarbimist basseini konfiguratsioonifailis.

Vaikimisi on www ja selle konfiguratsioonifail asub aadressil /etc/php-fpm.d/www.conf (saidil CentOS/RHEL/Fedora) või /etc/php/7.4/fpm/pool.d/www.conf ( Ubuntu/Debiani/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]

Leidke järgmised direktiivid ja määrake nende väärtus vastavalt teie kasutusele. Kommenteeritud direktiivide puhul peate need kommenteerima.

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

Selgitame lühidalt ülaltoodud direktiive ja nende väärtusi. Pm direktiiv määrab, kuidas protsessijuht kontrollib lapseprotsesside arvu. Vaikemeetod on dünaamiline, mis tähendab, et laste arv (lapseprotsessid) määratakse dünaamiliselt, sõltuvalt mõnest teisest direktiivist, sealhulgas pm.max_children, mis määratleb maksimaalse laste arvu, kes võivad samal ajal elus olla.

Kõige ideaalsem protsessihaldur on tellimusskeem, kus käivitamisel ei looda lapsprotsesse, vaid need sünnivad nõudmisel. Alamprotsessid on hargnenud ainult siis, kui uued taotlused ühendatakse pm.max_children ja pm.process_idle_timeout põhjal, mis määrab sekundite arvu, mille järel tühikäik protsess tapetakse.

Viimaseks, kuid mitte vähem tähtsaks, peame määrama parameetri pm.max_requests, mis määratleb taotluste arvu, mida iga lapseprotsess peaks enne uuesti kudemist täitma. Pange tähele, et seda parameetrit saab kasutada ka 3. osapoole teekide mälulekkide lahendamiseks.

Viide: parem viis PHP-FPM käitamiseks.

Pärast nende ülaltoodud konfiguratsioonide tegemist märkasin, et RAM-i kasutamine on meie serveris nüüd korras. Kas teil on selle teema või küsimustega seotud mõtteid? Võtke meiega ühendust allpool oleva tagasisidevormi kaudu.