8 magos 24 GB-os VPS fogytán a memóriából? Gyakorlati útmutató az extrém PHP-FPM folyamatpool finomhangolásához a HestiaCP segítségével

Az, hogy egy szerver mennyi egyidejű felhasználót tud kezelni, nem a processzormagok számától, hanem az egyes folyamatok által felhasznált memóriától függ.

Ez a kijelentés provokációnak tűnhet, de ez a legvalóságosabb és legfájdalmasabb tapasztalat az üzemeltetési és karbantartási iparágban.

Miért a memória a legfőbb szűk keresztmetszet?

Sokan tudat alatt azt gondolják, hogy egy 8 magos CPU-val és 24 GB memóriával rendelkező VPS könnyedén képes több száz PHP-FPM folyamatot futtatni.

A valóságban azonban egyetlen PHP folyamat RSS memóriahasználata gyakran eléri a 200 MB-ot.

Ez az eredmény, amelyet a parancssoron keresztüli tényleges tesztelés során kaptunk:

ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'

A HestiaCP összetett keretrendszerében és több plugint tartalmazó környezetében, különösen OPcache optimalizálás nélkül, a 200 MB a norma.

Ez azt jelenti, hogy a memória, nem pedig a CPU az a kemény korlát, amely meghatározza a maximális párhuzamosságot.

8 magos 24 GB-os VPS fogytán a memóriából? Gyakorlati útmutató az extrém PHP-FPM folyamatpool finomhangolásához a HestiaCP segítségével

Ajánlott konfigurációs fájl (php-fpm.conf)

pm = dynamic
pm.max_children = 80
pm.start_servers = 16
pm.min_spare_servers = 8
pm.max_spare_servers = 24
pm.max_requests = 500
pm.process_idle_timeout = 10s
request_terminate_timeout = 60s

Paraméterszámítási logika és beállítási alap

Konfigurációs paraméterekBeállítási értékMagszámítás és beállítás alapja
pmdynamicA dinamikus mód lehetővé teszi a folyamatok rugalmas hozzáadását vagy törlését a párhuzamossági követelmények alapján, kiegyensúlyozva a válaszidőt és a memória-kihasználtságot.
pm.max_children8024 GB teljes memória a rendszermag levonásával és MySQL/FeleinekAz Nginx után körülbelül 16 GB marad a PHP számára.16,384 MB / 200 MB ≈ 81.9A 80-as érték beállítása teljesen kiküszöböli az OOM-ot (Out of Memory - Megfogyott a memória) nagy párhuzamosság esetén.
pm.start_servers16Az indításkor az előmelegítés a CPU-magok számának kétszeresére van állítva (8 mag × 2 = 16), hogy a szolgáltatás az újraindítás után azonnal kezelni tudja az alapvető párhuzamos működést.
pm.min_tartalék_szerverek8Állítsd a CPU magok számát 8 magra, hogy az új kérésekre bármikor válaszolni lehessen alacsony forgalmú időszakokban is.
pm.max_tartalék_szerverek24Állítsd a CPU-magok számának háromszorosára (8 mag × 3 = 24), hogy a forgalom visszaesése után mérsékelt számú folyamat maradjon meg, így kezelve az enyhe ingadozásokat.
pm.max_requests500Ha egyetlen folyamat eléri a 200 MB-os nagy bázist, a kérések számának 500-ra csökkentése megsemmisíti és újraépíti a folyamatot, ami gyorsabban kiküszöbölheti az implicit memóriaszivárgásokat.
pm.process_idle_timeout10sTúllépő min_spare_servers A tétlen folyamatok automatikusan felszabadulnak és visszakerülnek a rendszermemóriába 10 másodpercnyi kérésmentesség után.

Alapvető támogató beállítások és optimalizálási javaslatok

1. Időtúllépéses másnapossággátló mechanizmus

request_terminate_timeout = 60s Ez a kulcs.

Kényszeresen leállíthatja az adatbázis-holtpont vagy harmadik féltől származó API-blokkolás miatt elakadt folyamatokat.

Eközben az Nginx fastcgi_read_timeout Legalább 60 másodpercig meg kell őrizni, különben az ügyfél idő előtt megkapja. 504 Gateway Timeout.

2. Stratégiák a memória szűk keresztmetszetek leküzdésére

A maximum 80 egyidejű folyamat azt jelenti, hogy szélsőséges párhuzamos működési körülmények között a rendszer maximum 80 dinamikus HTTP-kérést képes egyszerre kezelni.

Ha tovább szeretnéd növelni a kapacitást, akkor a folyamatok memóriafelhasználásának csökkentésére kell összpontosítanod.

  • Engedélyezze az OPcache-t: 在 php.ini Közepes konfiguráció opcache.enable=1 és opcache.memory_consumption=256A bájtkód-gyorsítótárazás egyetlen folyamat memóriahasználatát 200 MB-ról 60~100 MB-ra csökkentheti.
  • A memory_limit ésszerű szabályozása:Akarat php.ini középső memory_limit Korlátozott 128M 或 256MAz egyes rendellenes szkriptek megelőzése érdekébenkorlátlanSok memóriát fogyaszt.

Amikor egyetlen folyamat memóriahasználata 100 MB-ra csökken...pm.max_children Biztonságosan fejleszthető erre: 150 Ráadásul a párhuzamos működés lehetősége is csaknem megduplázódott.

Hivatkozott tekintélyes nézőpontok

A hivatalos Nginx dokumentációban található ajánlások szerint :

„A FastCGI alkalmazásokat mindig időtúllépési direktívákkal kell monitorozni az erőforrások kimerülésének megelőzése érdekében.”
(Forrás: Nginx dokumentáció)

A hivatalos PHP kézikönyv egyértelműen kimondja:

„A pm.max_children meghatározza a létrehozandó gyermekfolyamatok maximális számát. Ez a legfontosabb direktíva.”
(Forrás: PHP-FPM dokumentáció)

Ezek a mérvadó nézetek tökéletesen összhangban vannak a mi gyakorlatunkkal, bizonyítva, hogy az optimalizálási logika nemcsak tapasztalatokon, hanem szabványosított legjobb gyakorlatokon is alapul.

Konklúzió: Véleményem és főbb idézetek

Nagy párhuzamosság esetén a CPU a motor, a memória az üzemanyagtartály, a PHP-FPM pedig a flotta diszpécser.

Nem számít, milyen erős a motor, ha az üzemanyagtartály nem elég nagy, a konvoj nem fog messzire menni.

Az igazi szakértők nem vakon maximalizálják a paramétereket, hanem pontosan kiszámítják az egyes folyamatok memóriahasználatát, hogy elkerüljék a pazarlást és a túlcsordulást.

Az optimalizálás lényege, hogy korlátozott erőforrásokkal megtaláljuk az optimális egyensúlyt.

Ez nem csak technológia, hanem filozófia is.

Ezért ne hidd azt, hogy „a magok száma mindent meghatároz”. Ami igazán meghatározza a párhuzamos működés korlátját, az a memória feletti kontrollod.

Cselekedjen, és optimalizálja VPS-ét a lehető legjobban, minden csepp memóriát kihasználva.

发表 评论

您的邮箱地址不会被公开.必填项已用*标注

Lapozzon a lap tetejére