Direttorju tal-Artikoli
L-għadd ta' utenti konkorrenti li server jista' jimmaniġġja ma jiddependix fuq kemm għandu qlub, iżda fuq kemm jikkonsma memorja kull proċess.
Din id-dikjarazzjoni tista’ tinstema’ bħala provokazzjoni, iżda hija l-aktar esperjenza reali u ta’ wġigħ fl-industrija tal-operazzjonijiet u l-manutenzjoni.
Għaliex il-memorja hija l-ostaklu ewlieni?
Ħafna nies jaraw VPS b'CPU ta' 8 qlub u 24GB ta' memorja u subkonxjament jaħsbu li jistgħu faċilment imexxu mijiet ta' proċessi PHP-FPM.
Madankollu, fir-realtà, l-użu tal-memorja RSS ta' proċess PHP wieħed ħafna drabi jkun għoli daqs 200MB.
Dan huwa r-riżultat miksub permezz ta' ttestjar attwali permezz tal-linja tal-kmand:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Fl -istruttura kumplessa ta' HestiaCP u l-ambjent b'ħafna plugins, speċjalment mingħajr l-ottimizzazzjoni tal-OPcache, 200MB hija n-norma.
Dan ifisser li l-memorja, mhux is-CPU, hija l-limitu iebes li jiddetermina l-konkorrenza massima.

Fajl ta' konfigurazzjoni rakkomandat (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
Loġika tal-kalkolu tal-parametri u bażi tal-issettjar
| Parametri tal-konfigurazzjoni | Valur tal-issettjar | Kalkolu ewlieni u bażi ta' setup |
|---|---|---|
| pm | dynamic | Il-modalità dinamika tippermetti ż-żieda jew it-tħassir elastiku ta' proċessi bbażati fuq rekwiżiti ta' konkorrenza, filwaqt li tibbilanċja l-veloċità tar-rispons u l-użu tal-memorja. |
| pm.max_tfal | 80 | 24GB memorja totali mingħajr il-kernel tas-sistema u MySQL/Ddistribwit mill-Wara Nginx, fadal madwar 16GB għall-PHP.16,384 MB / 200 MB ≈ 81.9Jekk tissettjaha għal 80 tista' telimina kompletament l-OOM (Out of Memory) waqt konkorrenza għolja. |
| pm.start_servers | 16 | It-tisħin minn qabel fil-bidu huwa ssettjat għad-doppju tan-numru ta' qlub tas-CPU (8 qlub × 2 = 16) biex jiżgura li s-servizz ikun jista' jimmaniġġja immedjatament il-konkorrenza bażika wara li jerġa' jibda. |
| pm.min_spare_servers | 8 | Issettja l-għadd tal-qlub tas-CPU għal 8 qlub biex tiżgura li talbiet ġodda jistgħu jiġu mwieġba fi kwalunkwe ħin matul perjodi ta' traffiku baxx. |
| pm.max_spare_servers | 24 | Issettjah għal 3 darbiet in-numru ta' qlub tas-CPU (8 qlub × 3 = 24) biex iżżomm numru moderat ta' proċessi wara li t-traffiku jonqos, sabiex timmaniġġja varjazzjonijiet ħfief. |
| pm.max_requests | 500 | Jekk proċess wieħed jilħaq bażi kbira ta' 200MB, it-tnaqqis tan-numru ta' talbiet għal 500 qabel il-qerda u l-bini mill-ġdid jista' jnaddaf it-tnixxijiet impliċiti tal-memorja aktar malajr. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers Il-proċessi inattivi jiġu rilaxxati awtomatikament u rritornati fil-memorja tas-sistema wara 10 sekondi mingħajr ebda talba. |
Suġġerimenti Essenzjali ta' Appoġġ għas-Settings u l-Ottimizzazzjoni
1. Mekkaniżmu kontra l-hangover ta' timeout
request_terminate_timeout = 60s Dik hija ċ-ċavetta.
Jista' jtemm bil-forza proċessi li jkunu mwaħħlin minħabba imblukkar fid-database jew imblukkar tal-API minn partijiet terzi.
Sadanittant, ta' Nginx fastcgi_read_timeout Irid jinżamm għal mill-inqas 60 sekonda, inkella l-klijent jirċevih qabel iż-żmien. 504 Gateway Timeout.
2. Strateġiji biex jingħelbu l-ostakli tal-memorja
Massimu ta' 80 proċess konkorrenti jfisser li taħt kundizzjonijiet estremi ta' konkorrenza, is-sistema tista' timmaniġġja massimu ta' 80 talba HTTP dinamika simultanjament.
Jekk trid ittejjeb aktar il-kapaċità, l-enfasi għandha tkun fuq it-tnaqqis tal-użu tal-memorja għal kull proċess.
- Ippermetti OPcache: 在
php.iniKonfigurazzjoni medjaopcache.enable=1Uopcache.memory_consumption=256Il-caching tal-bytecode jista' jnaqqas l-użu tal-memorja ta' proċess wieħed minn 200MB għal 60~100MB. - Kontroll raġonevoli tal-memory_limit:将
php.ininofsmemory_limitLimitat għal128MJew256MBiex jiġu evitati skripts individwali anormaliillimitatJikkonsma ħafna memorja.
Ladarba l-użu tal-memorja ta' proċess wieħed jinżel għal 100MB...pm.max_children Jista' jiġi aġġornat b'mod sigur għal 150 Barra minn hekk, il-kapaċità ta' konkorrenza kważi rdoppjat.
Perspettivi awtorevoli ċċitati
Skont ir-rakkomandazzjonijiet fid -dokumentazzjoni uffiċjali ta' Nginx :
"L-applikazzjonijiet FastCGI għandhom dejjem jiġu mmonitorjati b'direttivi ta' timeout biex jiġi evitat l-eżawriment tar-riżorsi."
(Sors: Dokumenti ta' Nginx)
Il -manwal uffiċjali tal-PHP jiddikjara b'mod ċar:
"pm.max_children jiddefinixxi l-għadd massimu ta' proċessi tat-tfal li għandhom jinħolqu. Din hija l-aktar direttiva importanti."
(Sors: Dokumentazzjoni PHP-FPM)
Dawn il-fehmiet awtorevoli huma allinjati perfettament mal-prattiki tagħna, u dan juri li l-loġika tal-ottimizzazzjoni mhix ibbażata biss fuq l-esperjenza, iżda wkoll fuq l-aħjar prattiki standardizzati.
Konklużjoni: Il-Fehmiet u l-Kwotazzjonijiet Ewlenin Tiegħi
F'xenarji ta' konkorrenza għolja, is-CPU hija l-magna, il-memorja hija t-tank tal-fjuwil, u l-PHP-FPM huwa d-dispaċċatur tal-flotta.
Ma jimpurtax kemm hi qawwija l-magna, jekk it-tank tal-fjuwil ma jkunx kbir biżżejjed, il-konvoj mhux se jasal 'il bogħod ħafna.
L-esperti veri ma jimmassimizzawx il-parametri bl-addoċċ, iżda pjuttost jikkalkulaw b'mod preċiż l-użu tal-memorja ta' kull proċess biex jevitaw kemm il-ħela kif ukoll l-overflow.
L-essenza tal-ottimizzazzjoni hija li ssib il-bilanċ ottimali b'riżorsi limitati.
Din mhix biss teknoloġija, iżda wkoll filosofija.
Għalhekk, ieqaf temmen li "n-numru ta' qlub jiddetermina kollox." Dak li verament jiddetermina l-limitu tal-konkorrenza huwa l-kontroll tiegħek fuq il-memorja.
Ħu azzjoni u ottimizza l-VPS tiegħek sal-massimu tal-potenzjal tiegħu, billi tagħmel l-aħjar użu minn kull qatra memorja.
Nispera li l-artiklu "8-core 24GB VPS running out of memory? Extreme tuning of PHP-FPM process pool under HestiaCP" maqsum fuq il -blog ta' Chen Weiliang ( https://www.chenweiliang.com/ ) ikun ta' għajnuna għalik.
Ħossok liberu li taqsam il-link ta' dan l-artiklu: https://www.chenweiliang.com/cwl-34509.html
