Greinaskrá
Fjöldi samtímis notenda sem netþjónn getur meðhöndlað fer ekki eftir því hversu marga kjarna hann hefur, heldur eftir því hversu mikið minni hvert ferli notar.
Þessi yfirlýsing kann að hljóma eins og ögrun, en hún er raunverulegasta og sársaukafyllsta reynslan í rekstrar- og viðhaldsgeiranum.
Af hverju er minnið helsti flöskuhálsinn?
Margir sjá VPS með 8 kjarna örgjörva og 24GB af minni og halda ómeðvitað að þeir geti auðveldlega keyrt hundruð PHP-FPM ferla.
Hins vegar er í raun og veru RSS minnisnotkun eins PHP ferlis oft allt að 200 MB.
Þetta er niðurstaðan sem fengin var með raunverulegri prófun í gegnum skipanalínu:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Í flóknu rammaverki HestiaCP og fjölviðbótaumhverfi, sérstaklega án OPcache-bestunar, eru 200MB normið.
Þetta þýðir að minnið, ekki örgjörvinn, er hörðu takmörkin sem ákvarðar hámarks samtímisvirkni.

Ráðlögð stillingarskrá (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
Rökfræði og stillingargrunnur fyrir útreikning á breytum
| Stillingarfæribreytur | Stillingargildi | Kjarnaútreikningur og uppsetningargrunnur |
|---|---|---|
| pm | dynamic | Dynamískur stilling gerir kleift að bæta við eða eyða ferlum á sveigjanlegan hátt út frá samhliða kröfum, sem jafnar svörunarhraða og minnisnýtingu. |
| pm.max_börn | 80 | 24GB heildarminni án kerfiskjarna og MySQL/RedisEftir Nginx eru um það bil 16GB eftir fyrir PHP.16,384 MB / 200 MB ≈ 81.9Að stilla það á 80 getur alveg útrýmt OOM (Minni utan) við mikla samhliða virkni. |
| pm.start_servers | 16 | Forhitun við ræsingu er stillt á tvöfaldan fjölda örgjörvakjarna (8 kjarnar × 2 = 16) til að tryggja að þjónustan geti meðhöndlað grunn samhliða notkun strax eftir endurræsingu. |
| pm.min_spare_servers | 8 | Stilltu kjarnafjölda örgjörvans á 8 kjarna til að tryggja að hægt sé að svara nýjum beiðnum hvenær sem er á tímabilum með litla umferð. |
| pm.max_spare_servers | 24 | Stilltu það á þrefalt fjölda örgjörvakjarna (8 kjarnar × 3 = 24) til að viðhalda hóflegum fjölda ferla eftir að umferðin minnkar, til að takast á við vægar sveiflur. |
| pm.max_requests | 500 | Ef eitt ferli nær stórum grunnstærð, 200MB, getur það að fækka beiðnum niður í 500 áður en þeim er eytt og endurbyggð, hreinsað upp óbeina minnisleka hraðar. |
| pm.process_idle_timeout | 10s | Yfir min_spare_servers Óvirkum ferlum er sjálfkrafa hleypt af stokkunum og þær sendar aftur í kerfisminni eftir 10 sekúndur án beiðni. |
Nauðsynlegar stuðningsstillingar og tillögur að hagræðingu
1. Tímabundin varnarbúnaður gegn timburmenn
request_terminate_timeout = 60s Það er lykillinn.
Það getur með valdi stöðvað ferla sem eru fastir vegna pattstöðu í gagnagrunni eða API-blokkunar frá þriðja aðila.
Á meðan, Nginx fastcgi_read_timeout Það verður að geyma það í að minnsta kosti 60 sekúndur, annars fær viðskiptavinurinn það fyrir tímann. 504 Gateway Timeout.
2. Aðferðir til að sigrast á minnisflöskuhálsum
Hámark 80 samtímis ferlar þýðir að við erfiðar samtímis aðstæður getur kerfið afgreitt allt að 80 breytilegar HTTP beiðnir samtímis.
Ef þú vilt bæta afkastagetu enn frekar ætti að einbeita sér að því að draga úr minnisnotkun á hverju ferli.
- Virkja OPcache:在
php.iniMiðlungs stillingopcache.enable=1ogopcache.memory_consumption=256Skyndiminni með því að nota bætikóða getur dregið úr minnisnotkun eins ferlis úr 200 MB í 60~100 MB. - Sanngjörn stjórn á minnismörkumVilja
php.inimiðjamemory_limitTakmarkað við128MEða256MTil að koma í veg fyrir einstök óeðlileg forskriftótakmarkaðÞað eyðir miklu minni.
Þegar minnisnotkun eins ferlis fer niður í 100MB...pm.max_children Hægt er að uppfæra það á öruggan hátt í 150 Að auki hefur samhliða möguleikinn næstum tvöfaldast.
Áreiðanleg sjónarmið vitnað til
Samkvæmt ráðleggingunum í opinberu Nginx skjölunum :
„FastCGI forrit ættu alltaf að vera undir eftirliti með tímamörkum til að koma í veg fyrir að auðlindir tæmist.“
(Heimild: Nginx skjöl)
Í opinberu PHP handbókinni segir skýrt:
„pm.max_children skilgreinir hámarksfjölda undirferla sem búa má til. Þetta er mikilvægasta skipunin.“
(Heimild: PHP-FPM skjölun)
Þessi áreiðanlegu sjónarmið eru fullkomlega í samræmi við starfshætti okkar og sanna að hagræðingarrökfræði byggist ekki aðeins á reynslu, heldur einnig á stöðluðum bestu starfsháttum.
Niðurstaða: Mín sjónarmið og lykiltilvitnanir
Í aðstæðum með mikilli samhliða notkun er örgjörvinn vélin, minnið er eldsneytistankurinn og PHP-FPM er flotastjórinn.
Sama hversu öflug vélin er, ef eldsneytistankurinn er ekki nógu stór, þá kemst bílalestin ekki langt.
Sannir sérfræðingar hámarka ekki færibreyturnar í blindni, heldur reikna nákvæmlega út minnisnotkun hvers ferlis til að forðast bæði sóun og yfirflæði.
Kjarni hagræðingar er að finna besta jafnvægið með takmörkuðum fjármunum.
Þetta er ekki bara tækni, heldur líka heimspeki.
Hættu því að trúa því að „fjöldi kjarna ráði öllu.“ Það sem raunverulega ræður samhliða takmörkunum er stjórn þín á minni.
Gríptu til aðgerða og hámarkaðu VPS-þjóninn þinn til fulls, og nýttu hvern dropa af minni sem best.
Vonandi verður greinin „8-core 24GB VPS running out of memory? Extreme tuning of PHP-FPM process pool under HestiaCP“ sem er deilt á bloggi Chen Weiliang ( https://www.chenweiliang.com/ ) gagnleg fyrir þig.
Deilið endilega tenglinum á þessa grein: https://www.chenweiliang.com/cwl-34509.html
