Anyè Atik
Kantite itilizatè an menm tan yon sèvè ka jere pa depann de konbyen nwayo li genyen, men de konbyen memwa chak pwosesis konsome.
Deklarasyon sa a ka sonnen tankou yon pwovokasyon, men se eksperyans ki pi reyèl e ki pi douloure nan endistri operasyon ak antretyen an.
Poukisa memwa se prensipal blokaj la?
Anpil moun wè yon VPS ak yon CPU 8-nwayo ak 24GB memwa epi san yo pa rann yo kont yo panse ke yo ka fasilman egzekite plizyè santèn pwosesis PHP-FPM.
Sepandan, an reyalite, itilizasyon memwa RSS yon sèl pwosesis PHP souvan rive jiska 200MB.
Men rezilta yo jwenn nan tès reyèl la atravè liy kòmand lan:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Nan anviwònman konplèks HestiaCP a ak plizyè plugin, sitou san optimize OPcache, 200MB se nòm nan.
Sa vle di ke memwa, pa CPU a, se limit fiks ki detèmine maksimòm konkourans lan.

Fichye konfigirasyon rekòmande (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
Lojik kalkil paramèt ak baz konfigirasyon
| Paramèt konfigirasyon | Valè anviwònman an | Kalkil debaz ak baz konfigirasyon |
|---|---|---|
| pm | dynamic | Mòd dinamik pèmèt adisyon oswa sipresyon elastik pwosesis ki baze sou egzijans konkourans, pou balanse vitès repons ak itilizasyon memwa. |
| pm.max_children | 80 | 24GB memwa total mwens nwayo sistèm lan ak Miskl/RedisApre Nginx, apeprè 16GB rete pou PHP.16,384 MB / 200 MB ≈ 81.9Mete li sou 80 ka elimine OOM (Out of Memory) nèt pandan gwo konkourans. |
| pm.start_servers | 16 | Prechofaj nan demaraj la fikse sou de fwa kantite nwayo CPU a (8 nwayo × 2 = 16) pou asire ke sèvis la ka jere konkourans debaz imedyatman apre rekòmansman. |
| pm.min_spare_servers | 8 | Mete kantite nwayo CPU a sou 8 nwayo pou asire ke ou ka reponn a nouvo demann yo nenpòt ki lè pandan peryòd ki ba trafik. |
| pm.max_spare_servers | 24 | Mete li sou 3 fwa kantite nwayo CPU yo (8 nwayo × 3 = 24) pou kenbe yon kantite modere pwosesis apre trafik la fin bese, pou jere ti chanjman yo. |
| pm.max_requests | 500 | Si yon sèl pwosesis rive nan yon gwo baz 200MB, diminye kantite demann yo a 500 anvan detwi epi rebati ka netwaye flit memwa implicite pi vit. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers Pwosesis ki inaktif yo lage otomatikman epi yo retounen nan memwa sistèm lan apre 10 segonn san okenn demann. |
Sijesyon Esansyèl pou Anviwònman ak Optimizasyon
1. Mekanis anti-hangover tan limit
request_terminate_timeout = 60s Se kle a.
Li ka fòseman mete fen nan pwosesis ki bloke akòz blokaj nan baz done a oswa blokaj API twazyèm pati.
Pandansetan, Nginx la fastcgi_read_timeout Li dwe kenbe pou omwen 60 segonn, sinon kliyan an ap resevwa li twò bonè. 504 Gateway Timeout.
2. Estrateji pou simonte blokaj memwa
Yon maksimòm de 80 pwosesis similtane vle di ke nan kondisyon konkirans ekstrèm, sistèm nan ka jere yon maksimòm de 80 demann HTTP dinamik an menm tan.
Si ou vle amelyore kapasite a plis toujou, ou ta dwe konsantre sou diminye itilizasyon memwa pou chak pwosesis.
- Pèmèt OPcache: Nan
php.iniKonfigirasyon mwayenopcache.enable=1及opcache.memory_consumption=256Kach bytecode ka diminye itilizasyon memwa yon sèl pwosesis soti nan 200MB pou rive nan 60~100MB. - Kontwòl rezonab sou memory_limitWill
php.inimitanmemory_limitLimite a128MOswa256MPou anpeche script endividyèl anòmalsan limitLi konsome anpil memwa.
Yon fwa itilizasyon memwa yon sèl pwosesis desann rive nan 100MB...pm.max_children Li ka amelyore san danje pou 150 Anplis de sa, kapasite konkourans lan prèske double.
Pwen de vi ki gen otorite yo site
Dapre rekòmandasyon ki nan dokimantasyon ofisyèl Nginx la :
"Aplikasyon FastCGI yo ta dwe toujou siveye ak direktiv delè pou anpeche epuizman resous yo."
(Sous: Dokiman Nginx)
Manyèl ofisyèl PHP a di byen klè:
"pm.max_children defini kantite maksimòm pwosesis pitit ki dwe kreye. Sa a se direktiv ki pi enpòtan an."
(Sous: Dokimantasyon PHP-FPM)
Pwen de vi sa yo ki fè otorite yo anfòm parfe ak pratik nou yo, sa ki pwouve ke lojik optimize a pa sèlman baze sou eksperyans, men tou sou pi bon pratik estanda yo.
Konklizyon: Pwen de vi mwen yo ak sitasyon kle yo
Nan senaryo kote gen anpil konkourans, CPU a se motè a, memwa a se tank gaz la, epi PHP-FPM se dispatchè flòt la.
Kèlkeswa jan motè a puisan, si tank gaz la pa ase gwo, konvwa a p ap rive twò lwen.
Vrè ekspè yo pa maksimize paramèt yo san reflechi, men pito kalkile avèk presizyon itilizasyon memwa chak pwosesis pou evite gaspiyaj ak debòdman.
Esans optimize a se jwenn balans optimal la ak resous limite.
Sa a se pa sèlman yon teknoloji, men tou yon filozofi.
Se poutèt sa, sispann kwè ke "kantite nwayo yo detèmine tout bagay." Sa ki vrèman detèmine limit konkourans lan se kontwòl ou genyen sou memwa.
Pran aksyon epi optimize VPS ou a nan tout potansyèl li, pou tire pi bon pwofi nan chak gout memwa.
Espere ke atik "8-core 24GB VPS running out of memory? Extreme ajusting of PHP-FPM process pool under HestiaCP" ki pataje sou blog Chen Weiliang la ( https://www.chenweiliang.com/ ) ap itil ou.
Pa ezite pataje lyen atik sa a: https://www.chenweiliang.com/cwl-34509.html
