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


Jos olet ottanut käyttöön LEMP (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 (FastCGI Process Manager: n lyhenne) on laajalti käytetty ja suorituskykyinen vaihtoehtoinen PHP FastCGI -toteutus.

Tässä on hyödyllisiä oppaita LEMP Stackin määrittämisestä Linuxissa.

  • Kuinka LEMP-pino asennetaan PhpMyAdminin kanssa Ubuntu 20.04 -käyttöjärjestelmään
  • LEMP-palvelimen asentaminen CentOS 8: een
  • LEMP: n asentaminen Debian 10 Server -palvelimeen

Viime aikoina kaikki PHP-verkkosivustomme yhdessä LEMP-verkkopalvelimessamme hidastuivat ja lopulta lopettivat vastaamisen kirjautumalla palvelimeen. huomasimme, että järjestelmässä oli vähän RAM-muistia: PHP-FPM oli kuluttanut suurimman osan RAM-muistista, kuten seuraavassa kuvakaappauksessa osoitetaan (vilkaisut - järjestelmän valvontatyökalu).

$ glances

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

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

Tutkittuamme Internetiä huomasimme, että meidän on määritettävä uudelleen PHP-FPM-prosessinhallinta ja tietyt sen näkökohdat, jotta voidaan vähentää PHP-FPM: n muistin kulutusta poolin kokoonpanotiedostossa.

Oletusvarasto on www ja sen määritystiedosto sijaitsee osoitteessa /etc/php-fpm.d/www.conf (CentOS/RHEL/Fedora) 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 direktiivit ja aseta niiden arvo käyttötapauksesi mukaan. Kommentoiduista direktiiveistä on poistettava kommentit.

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

Selitetään lyhyesti edellä mainitut direktiivit ja niiden arvot. Pm-direktiivi määrää, kuinka prosessinjohtaja hallinnoi aliprosessien määrää. Oletusmenetelmä on dynaaminen, mikä tarkoittaa, että lasten määrä (lapsiprosessit) asetetaan dynaamisesti riippuen joistakin muista direktiiveistä, mukaan lukien pm.max_children, joka määrittää samanaikaisesti elossa olevien lasten enimmäismäärän.

Ihanteellinen prosessinhallinta on ondemand-järjestelmä, jossa aloitusprosesseja ei luoda käynnistyksen yhteydessä, mutta ne syntyvät tarvittaessa. Aliprosessit haarautuvat vain, kun uudet pyynnöt muodostavat yhteyden pm.max_children- ja pm.process_idle_timeout-arvojen perusteella, jotka määrittelevät sekuntien määrän, jonka jälkeen tyhjäkäynnin prosessi tapetaan.

Viimeisenä mutta ei vähäisimpänä, meidän on asetettava parametri pm.max_requests, joka määrittelee pyyntöjen lukumäärän, jonka jokaisen lapsiprosessin tulisi suorittaa ennen kutua. Huomaa, että tätä parametria voidaan käyttää myös kiertotapana kolmansien osapuolten kirjastojen muistivuodoille.

Viite: Parempi tapa suorittaa PHP-FPM.

Suoritettuani nämä yllä olevat määritykset huomasin, että RAM-käyttö on nyt kunnossa palvelimellamme. Onko sinulla ajatuksia, jotka liittyvät tähän aiheeseen tai kysymyksiin? Ota yhteyttä alla olevan palautelomakkeen kautta.