VPS me 8 bërthama dhe 24GB po i mbaron memoria? Udhëzues praktik për akordimin ekstrem të grupit të proceseve PHP-FPM me HestiaCP

Numri i përdoruesve të njëkohshëm që një server mund të trajtojë nuk varet nga numri i bërthamave që ka, por nga sasia e memories që konsumon secili proces.

Kjo deklaratë mund të tingëllojë si provokim, por është përvoja më reale dhe e dhimbshme në industrinë e operimit dhe mirëmbajtjes.

Pse kujtesa është pengesa kryesore?

Shumë njerëz shohin një VPS me një CPU me 8 bërthama dhe 24 GB memorie dhe në mënyrë të pavetëdijshme mendojnë se mund të ekzekutojnë lehtësisht qindra procese PHP-FPM.

Megjithatë, në realitet, përdorimi i memories RSS të një procesi të vetëm PHP është shpesh deri në 200MB.

Ky është rezultati i marrë përmes testimit aktual përmes vijës së komandës:

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

Në framework-un kompleks dhe mjedisin me shumë plugin-e të HestiaCP -së, veçanërisht pa optimizimin e OPcache, 200MB është norma.

Kjo do të thotë që memoria, jo CPU, është limiti i fortë që përcakton njëkohshmërinë maksimale.

VPS me 8 bërthama dhe 24GB po i mbaron memoria? Udhëzues praktik për akordimin ekstrem të grupit të proceseve PHP-FPM me HestiaCP

Skedari i rekomanduar i konfigurimit (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

Logjika e llogaritjes së parametrave dhe baza e vendosjes

Parametrat e konfigurimitVendosja e vlerësBaza e llogaritjes dhe konfigurimit të bërthamës
pmdynamicModaliteti dinamik lejon shtimin ose fshirjen elastike të proceseve bazuar në kërkesat e njëkohshmërisë, duke balancuar shpejtësinë e përgjigjes dhe shfrytëzimin e memories.
pm.max_fëmijët8024 GB memorie totale minus bërthamën e sistemit dhe MySQL/RedisPas Nginx, mbeten afërsisht 16 GB për PHP.16,384 MB / 200 MB ≈ 81.9Vendosja e tij në 80 mund ta eliminojë plotësisht OOM (Mungesë e Memories) gjatë njëkohshmërisë së lartë.
pm.start_servers16Ngrohja paraprake gjatë nisjes është vendosur në dyfishin e numrit të bërthamave të CPU-së (8 bërthama × 2 = 16) për të siguruar që shërbimi të mund të trajtojë menjëherë paralelizmin bazë pas rinisjes.
pm.min_spare_servers8Vendosni numrin e bërthamave të CPU-së në 8 bërthama për të siguruar që kërkesave të reja mund t'u përgjigjet në çdo kohë gjatë periudhave me trafik të ulët.
pm.max_spare_servers24Vendoseni në 3 herë numrin e bërthamave të CPU-së (8 bërthama × 3 = 24) për të ruajtur një numër të moderuar procesesh pasi trafiku të zvogëlohet, në mënyrë që të përballoni luhatje të lehta.
pm.max_kërkesat500Nëse një proces i vetëm arrin një bazë të madhe prej 200MB, zvogëlimi i numrit të kërkesave në 500 do ta shkatërrojë dhe rindërtojë procesin, gjë që mund të pastrojë rrjedhjet implicite të memories më shpejt.
pm.process_idle_timeout10s超出 min_spare_servers Proceset joaktive lirohen automatikisht dhe kthehen në memorien e sistemit pas 10 sekondash pa kërkesa.

Cilësimet Mbështetëse Thelbësore dhe Sugjerimet e Optimizimit

1. Mekanizëm kundër dehjes me ndërprerje të kohës

request_terminate_timeout = 60s Ky është çelësi.

Mund të ndërpresë me forcë proceset që kanë ngecur për shkak të bllokimit të bazës së të dhënave ose bllokimit të API-t nga palë të treta.

Ndërkohë, Nginx-i fastcgi_read_timeout Duhet të mbahet të paktën 60 sekonda, përndryshe klienti do ta marrë atë para kohe. 504 Gateway Timeout.

2. Strategji për të kapërcyer pengesat e kujtesës

Një maksimum prej 80 procesesh të njëkohshme do të thotë që në kushte ekstreme të njëkohshmërisë, sistemi mund të trajtojë një maksimum prej 80 kërkesash dinamike HTTP njëkohësisht.

Nëse doni të përmirësoni më tej kapacitetin, fokusi duhet të jetë në zvogëlimin e përdorimit të memories për proces.

  • Aktivizo OPcache:në php.ini Konfigurimi i mesëm opcache.enable=1 dhe opcache.memory_consumption=256Ruajtja në memorje e bytecode mund të zvogëlojë përdorimin e memories së një procesi të vetëm nga 200MB në 60~100MB.
  • Kontroll i arsyeshëm i memory_limit: 将 php.ini e mesme memory_limit I kufizuar në 128M ose 256MPër të parandaluar skenarë anormalë individualëe pakufizuarKonsumon shumë memorie.

Pasi përdorimi i memories së një procesi të vetëm bie në 100MB...pm.max_children Mund të përmirësohet në mënyrë të sigurt në 150 Për më tepër, aftësia e bashkëveprimit është pothuajse dyfishuar.

Pikëpamjet autoritare të cituara

Sipas rekomandimeve në dokumentacionin zyrtar të Nginx :

Aplikacionet FastCGI duhet të monitorohen gjithmonë me direktiva skadimi për të parandaluar shterimin e burimeve.
(Burimi: Dokumentet Nginx)

Manuali zyrtar i PHP-së thotë qartë:

"pm.max_children përcakton numrin maksimal të proceseve fëmijë që do të krijohen. Ky është direktiva më e rëndësishme."
(Burimi: Dokumentacioni PHP-FPM)

Këto pikëpamje autoritare janë në përputhje të përkryer me praktikat tona, duke vërtetuar se logjika e optimizimit nuk bazohet vetëm në përvojë, por edhe në praktikat më të mira të standardizuara.

Përfundim: Pikëpamjet e mia dhe citimet kryesore

Në skenarë me paralelizëm të lartë, CPU është motori, memoria është rezervuari i karburantit dhe PHP-FPM është dispeçeri i flotës.

Pavarësisht se sa i fuqishëm është motori, nëse rezervuari i karburantit nuk është mjaftueshëm i madh, konvoji nuk do të shkojë shumë larg.

Ekspertët e vërtetë nuk i maksimizojnë verbërisht parametrat, por përkundrazi llogarisin me saktësi përdorimin e memories së secilit proces për të shmangur si shpërdorimin ashtu edhe mbingarkesën.

Thelbi i optimizimit është gjetja e ekuilibrit optimal me burime të kufizuara.

Kjo nuk është vetëm një teknologji, por edhe një filozofi.

Prandaj, mos besoni më se "numri i bërthamave përcakton gjithçka". Ajo që përcakton vërtet limitin e njëkohshmërisë është kontrolli juaj mbi memorien.

Merrni masa dhe optimizoni VPS-në tuaj në potencialin e saj të plotë, duke shfrytëzuar në maksimum çdo pikë memorieje.

发表 评论

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

Scroll to Top