Kuinka estää PHP-FPM kuluttamasta liikaa RAM-muistia Linuxissa


Jos olet ottanut käyttöön LEMP:n (Linux, NGINX, MySQL/MariaDB ja PHP)) pino, käytät todennäköisesti FastCGI-välityspalvelinta NGINX:ssä (HTTP-palvelimena) PHP-käsittelyyn. PHP-FPM (lyhenne sanoista FastCGI Process Manager) on laajalti käytetty ja tehokas vaihtoehtoinen PHP FastCGI -toteutus.

Tässä on hyödyllisiä ohjeita LEMP Stackin määrittämiseen Linuxissa.

  • LEMP-pinon asentaminen PhpMyAdminilla Ubuntu 20.04:ssä
  • Kuinka asentaa LEMP-palvelin CentOS 8:aan
  • Kuinka asentaa LEMP Debian 10 -palvelimelle

Äskettäin kaikki PHP-verkkosivustomme yhdellä LEMP-verkkopalvelimellamme hidastivat ja lopulta lakkasivat vastaamasta kirjautuessaan palvelimelle. havaitsimme, että järjestelmän RAM-muisti oli vähissä: PHP-FPM oli kuluttanut suurimman osan RAM-muistista, kuten seuraavasta kuvakaappauksesta käy ilmi (silmäyksiä – järjestelmän valvontatyökalu).

glances

Tässä artikkelissa näytämme, kuinka estää PHP-FPM kuluttamasta liikaa tai koko järjestelmämuistia (RAM) Linuxissa. Tämän oppaan lopussa opit vähentämään PHP-FPM-muistin kulutusta 50 % tai enemmän.

Vähennä PHP-FPM-muistin käyttöä

Tutkittuamme Internetissä havaitsimme, että PHP-FPM-prosessinhallinta ja tietyt sen osat on määritettävä uudelleen, jotta PHP-FPM:n muistinkulutus poolin määritystiedostossa voidaan vähentää.

Oletusvarasto on www ja sen asetustiedosto sijaitsee osoitteessa /etc/php-fpm.d/www.conf (CentOS/RHEL/Fedorassa) tai /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]

Etsi seuraavat käskyt ja aseta niiden arvo käyttötapaukseesi sopivaksi. Kommentoitujen ohjeiden kommentointi on poistettava.

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

Selvitetään lyhyesti yllä olevat direktiivit ja niiden arvot. pm-direktiivi määrittää, kuinka prosessinhallinta hallitsee aliprosessien määrää. Oletusmenetelmä on dynaaminen, mikä tarkoittaa, että lapsien määrä (lapsiprosessit) asetetaan dynaamisesti riippuen joistakin muista direktiiveistä, mukaan lukien pm.max_children, joka määrittää lapsien enimmäismäärän. voi olla elossa samaan aikaan.

Ihanteellisin prosessinhallinta on ondemand-järjestelmä, jossa aliprosesseja ei luoda käynnistettäessä, vaan ne syntyvät pyynnöstä. Alatason prosessit haaroittuvat vain, kun uudet pyynnöt yhdistetään pm.max_children- ja pm.process_idle_timeout-määritteiden perusteella, jotka määrittelevät sekuntien määrän, jonka jälkeen käyttämätön prosessi lopetetaan.

Viimeisenä mutta ei vähäisimpänä, meidän on asetettava pm.max_requests-parametri, joka määrittää pyyntöjen lukumäärän, jotka kunkin alatason prosessin tulee suorittaa ennen uudelleensyntymistä. Huomaa, että tätä parametria voidaan käyttää myös kiertotapana kolmannen osapuolen kirjastojen muistivuotojen varalta.

Kun olen tehnyt nämä yllä olevat asetukset, huomasin, että RAM-muistin käyttö on nyt kunnossa palvelimellamme. Onko sinulla tähän aiheeseen liittyviä ajatuksia tai kysymyksiä? Ota meihin yhteyttä alla olevan palautelomakkeen kautta.