Hvernig á að koma í veg fyrir að PHP-FPM neyti of mikið vinnsluminni í Linux


Ef þú hefur sett upp LEMP (Linux, NGINX, MySQL/MariaDB og PHP) stafla, þá ertu líklega að nota FastCGI umboð innan NGINX (sem HTTP netþjónn), fyrir PHP vinnslu. PHP-FPM (skammstöfun á FastCGI Process Manager) er mikið notað og afkastamikið val PHP FastCGI útfærslu.

Hér eru gagnlegar leiðbeiningar um að setja upp LEMP Stack í Linux.

  • Hvernig á að setja upp LEMP Stack með PhpMyAdmin í Ubuntu 20.04
  • Hvernig á að setja upp LEMP Server á CentOS 8
  • Hvernig á að setja upp LEMP á Debian 10 Server

Nýlega urðu allar PHP vefsíður okkar á einum af LEMP vefþjónunum okkar hægar og hættu að lokum að svara við innskráningu á netþjóninn. við komumst að því að vinnsluminni var lítið í kerfinu: PHP-FPM hafði neytt megnið af vinnsluminni, eins og sýnt er á eftirfarandi skjáskoti (blik – kerfiseftirlitstæki).

$ glances

Í þessari grein munum við sýna hvernig á að koma í veg fyrir að PHP-FPM eyði of miklu eða öllu kerfisminni (RAM) í Linux. Í lok þessarar handbókar muntu læra hvernig á að minnka PHP-FPM minnisnotkun um 50% eða meira.

Draga úr PHP-FPM minnisnotkun

Eftir smá rannsóknir á internetinu komumst við að því að við þyrftum að endurstilla PHP-FPM vinnslustjórann og ákveðna þætti hans til að draga úr minnisnotkun PHP-FPM í laug stillingarskránni.

Sjálfgefin laug er www og stillingarskrá hennar er staðsett á /etc/php-fpm.d/www.conf (á CentOS/RHEL/Fedora) eða /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]

Finndu eftirfarandi tilskipanir og stilltu gildi þeirra til að henta notkunartilvikum þínum. Fyrir tilskipanir sem eru skrifaðar út þarftu að afskrifa þær.

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

Við skulum útskýra í stuttu máli ofangreindar tilskipanir og gildi þeirra. pm tilskipunin ákvarðar hvernig ferlistjóri mun stjórna fjölda undirferla. Sjálfgefin aðferð er breytileg, sem þýðir að fjöldi barna (barnaferli) er stilltur á virkan hátt eftir einhverjum öðrum tilskipunum þar á meðal pm.max_children sem skilgreinir hámarksfjölda barna sem geta verið á lífi á sama tíma.

Besti vinnslustjórinn er eftirspurn kerfi þar sem engin undirferli eru búin til við ræsingu heldur verða til eftir beiðni. Undirferlar eru aðeins flokkaðir þegar nýjar beiðnir munu tengjast á grundvelli pm.max_children og pm.process_idle_timeout sem skilgreinir fjölda sekúndna eftir sem aðgerðalaus ferli verður drepið.

Síðast en ekki síst þurfum við að stilla pm.max_requests færibreytuna sem skilgreinir fjölda beiðna sem hvert barn ferli ætti að framkvæma áður en það hrygnir aftur. Athugaðu að þessa breytu er einnig hægt að nota sem lausn fyrir minnisleka í söfnum þriðja aðila.

Tilvísun: Betri leið til að keyra PHP-FPM.

Eftir að hafa gert þessar ofangreindar stillingar tók ég eftir því að vinnsluminni er nú í lagi á netþjóninum okkar. Hefur þú einhverjar hugsanir til að deila varðandi þetta efni eða spurningar? Hafðu samband við okkur í gegnum athugasemdareyðublaðið hér að neðan.