Jinsi ya Kuzuia PHP-FPM Kutumia RAM Nyingi katika Linux


Ikiwa umetuma safu ya LEMP (Linux, NGINX, MySQL/MariaDB, na PHP), basi labda unatumia wakala wa FastCGI ndani ya NGINX (kama seva ya HTTP), kwa usindikaji wa PHP. PHP-FPM (kifupi cha Kidhibiti Mchakato cha FastCGI) ni utekelezaji unaotumika sana na wa utendaji wa juu wa PHP FastCGI.

Hapa kuna miongozo muhimu ya kusanidi Stack ya LEMP kwenye Linux.

  • Jinsi ya Kusakinisha LeMP Stack na PhpMyAdmin katika Ubuntu 20.04
  • Jinsi ya Kusakinisha Seva ya LEMP kwenye CentOS 8
  • Jinsi ya Kusakinisha LEMP kwenye Seva ya Debian 10

Hivi majuzi, tovuti zetu zote za PHP kwenye mojawapo ya seva zetu za LEMP zilikua polepole na hatimaye zikaacha kujibu wakati wa kuingia kwenye seva. tuligundua kuwa mfumo ulikuwa na RAM kidogo: PHP-FPM ilikuwa imetumia RAM nyingi, kama inavyoonyeshwa kwenye picha ya skrini ifuatayo (mionekano - zana ya ufuatiliaji wa mfumo).

$ glances

Katika makala haya, tutaonyesha jinsi ya kuzuia PHP-FPM kutumia sana au kumbukumbu yako yote ya mfumo (RAM) katika Linux. Mwishoni mwa mwongozo huu, utajifunza jinsi ya kupunguza matumizi ya kumbukumbu ya PHP-FPM kwa 50% au zaidi.

Punguza Matumizi ya Kumbukumbu ya PHP-FPM

Baada ya kufanya utafiti kwenye Mtandao, tuligundua kwamba tulihitaji kusanidi upya kidhibiti cha mchakato wa PHP-FPM na vipengele fulani ili kupunguza matumizi ya kumbukumbu ya PHP-FPM katika faili ya usanidi wa bwawa.

Dimbwi chaguo-msingi ni www na faili yake ya usanidi iko katika /etc/php-fpm.d/www.conf (kwenye CentOS/RHEL/Fedora) au /etc/php/7.4/fpm/pool.d/www.conf ( kwenye 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]

Pata maagizo yafuatayo na uweke thamani yao ili kuendana na kesi yako ya utumiaji. Kwa maagizo ambayo yametolewa maoni, unahitaji kuyaondoa.

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

Hebu tueleze kwa ufupi maagizo hapo juu na maadili yao. Maagizo ya pm huamua jinsi meneja wa mchakato atakavyodhibiti idadi ya michakato ya mtoto. Mbinu chaguo-msingi ni inayobadilika, ambayo ina maana kwamba idadi ya watoto (michakato ya mtoto) imewekwa kwa nguvu kulingana na maagizo mengine ikiwa ni pamoja na pm.max_children ambayo hufafanua idadi ya juu zaidi ya watoto wanaoweza kuwa hai kwa wakati mmoja.

Kidhibiti bora zaidi cha mchakato ni mpango wa mahitaji ambapo hakuna michakato ya mtoto inayoundwa wakati wa kuanza lakini hutolewa kwa mahitaji. Michakato ya mtoto hutupwa tu wakati maombi mapya yataunganishwa kulingana na pm.max_children na pm.process_idle_timeout ambayo hufafanua idadi ya sekunde ambapo mchakato wa kutofanya kazi utauawa.

Mwisho kabisa, tunahitaji kuweka kigezo cha pm.max_requests ambacho kinafafanua idadi ya maombi ambayo kila mchakato wa mtoto unapaswa kutekelezwa kabla ya kuzaa tena. Kumbuka kuwa kigezo hiki pia kinaweza kutumika kama suluhisho la uvujaji wa kumbukumbu katika maktaba za watu wengine.

Rejea: Njia bora ya kuendesha PHP-FPM.

Baada ya kufanya usanidi huu hapo juu, niligundua utumiaji wa RAM sasa ni sawa kwenye seva yetu. Je, una mawazo yoyote ya kushiriki kuhusiana na mada hii au maswali? Wasiliana nasi kupitia fomu ya maoni iliyo hapa chini.