Maqolalar katalogi
Server bir vaqtning o'zida qancha foydalanuvchini qayta ishlay olishi uning yadrolari soniga emas, balki har bir jarayon qancha xotira iste'mol qilishiga bog'liq.
Bu bayonot provokatsiya kabi eshitilishi mumkin, ammo bu operatsiyalar va texnik xizmat ko'rsatish sohasidagi eng haqiqiy va og'riqli tajriba.
Nima uchun xotira asosiy muammo hisoblanadi?
Ko'p odamlar 8 yadroli protsessor va 24 Gb xotiraga ega VPSni ko'rishadi va ongsiz ravishda yuzlab PHP-FPM jarayonlarini osongina ishga tushirish mumkin deb o'ylashadi.
Biroq, aslida, bitta PHP jarayonining RSS xotirasidan foydalanish ko'pincha 200 MB ga etadi.
Bu buyruq satri orqali haqiqiy sinov orqali olingan natijadir:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
HestiaCP ning murakkab freymvorki va ko'p plaginli muhitida , ayniqsa OPcache optimallashtirishsiz, 200MB norma hisoblanadi.
Bu shuni anglatadiki, maksimal parallellikni belgilaydigan qattiq chegara protsessor emas, balki xotira hisoblanadi.

Tavsiya etilgan konfiguratsiya fayli (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
Parametrlarni hisoblash mantig'i va sozlash asoslari
| Konfiguratsiya parametrlari | Qiymatni sozlash | Asosiy hisoblash va o'rnatish asoslari |
|---|---|---|
| pm | dynamic | Dinamik rejim parallellik talablariga asoslanib, javob tezligi va xotiradan foydalanishni muvozanatlashtirib, jarayonlarni elastik qo'shish yoki o'chirish imkonini beradi. |
| pm.max_children | 80 | Tizim yadrosidan tashqari umumiy xotira 24GB va MySQL/RedisNginxdan so'ng, PHP uchun taxminan 16 GB qoladi.16,384 MB / 200 MB ≈ 81.9Uni 80 ga o'rnatish yuqori parallellik paytida OOM (Xotiradan tashqari) ni butunlay yo'q qilishi mumkin. |
| pm.start_servers | 16 | Xizmat qayta ishga tushirilgandan so'ng asosiy parallellikni darhol boshqarishi uchun ishga tushirishda oldindan qizdirish protsessor yadrolari sonidan ikki baravar ko'p (8 yadro × 2 = 16) qilib o'rnatiladi. |
| pm.min_spare_servers | 8 | Trafik kam bo'lgan davrlarda yangi so'rovlarga istalgan vaqtda javob berilishi uchun protsessor yadrolari sonini 8 taga o'rnating. |
| pm.max_spare_servers | 24 | Yengil tebranishlarni boshqarish uchun trafik kamayganidan keyin o'rtacha miqdordagi jarayonlarni saqlab qolish uchun uni protsessor yadrolari sonidan 3 baravar ko'p (8 yadro × 3 = 24) qilib sozlang. |
| pm.max_requests | 500 | Agar bitta jarayon 200 MB katta bazaga yetsa, yo'q qilish va qayta tiklashdan oldin so'rovlar sonini 500 tagacha kamaytirish yashirin xotira oqishini tezroq bartaraf etishi mumkin. |
| pm.process_idle_timeout | 10s | Oshib ketish min_spare_servers Bo'sh jarayonlar avtomatik ravishda bo'shatiladi va 10 soniya davomida so'rovlarsiz tizim xotirasiga qaytariladi. |
Muhim qo'llab-quvvatlovchi sozlamalar va optimallashtirish bo'yicha tavsiyalar
1. Bosh og'rig'iga qarshi vaqt tugashi mexanizmi
request_terminate_timeout = 60s Kalit shu.
Ma'lumotlar bazasining qulflanishi yoki uchinchi tomon API bloklanishi tufayli tiqilib qolgan jarayonlarni majburan to'xtatishi mumkin.
Shu bilan birga, Nginx's fastcgi_read_timeout Uni kamida 60 soniya ushlab turish kerak, aks holda mijoz uni muddatidan oldin oladi. 504 Gateway Timeout.
2. Xotiradagi to'siqlarni yengib o'tish strategiyalari
Maksimal 80 ta parallel jarayon shuni anglatadiki, o'ta parallellik sharoitida tizim bir vaqtning o'zida maksimal 80 ta dinamik HTTP so'rovlarini bajara oladi.
Agar siz sig'imni yanada oshirishni istasangiz, diqqat markazida har bir jarayon uchun xotira sarfini kamaytirishga qaratilishi kerak.
- OPcache-ni yoqing: yilda
php.iniO'rta konfiguratsiyaopcache.enable=1vaopcache.memory_consumption=256Baytkod keshlash bitta jarayonning xotira sarfini 200MB dan 60~100MB gacha kamaytirishi mumkin. - Memory_limitni oqilona boshqarish:Villi
php.inio'rtamemory_limitCheklangan128MYoki256MAlohida g'ayritabiiy skriptlarning oldini olish uchuncheksizBu juda ko'p xotirani iste'mol qiladi.
Bitta jarayonning xotiradan foydalanish hajmi 100 MB ga tushganda...pm.max_children Uni xavfsiz ravishda yangilash mumkin 150 Bundan tashqari, parallellik qobiliyati deyarli ikki baravar oshdi.
Imtiyozli nuqtai nazarlar keltirilgan
Rasmiy Nginx hujjatlaridagi tavsiyalarga muvofiq :
"Resurslarning tugashini oldini olish uchun FastCGI ilovalari doimo vaqt tugashi ko'rsatmalari bilan kuzatilishi kerak."
(Manba: Nginx hujjatlari)
Rasmiy PHP qo'llanmasida aniq aytilgan:
"pm.max_children yaratilishi kerak bo'lgan bolalar jarayonlarining maksimal sonini belgilaydi. Bu eng muhim ko'rsatma."
(Manba: PHP-FPM hujjatlari)
Ushbu obro'li qarashlar bizning amaliyotimizga to'liq mos keladi, bu optimallashtirish mantig'i nafaqat tajribaga, balki standartlashtirilgan eng yaxshi amaliyotlarga ham asoslanganligini isbotlaydi.
Xulosa: Mening qarashlarim va asosiy iqtiboslar
Yuqori parallellik stsenariylarida protsessor dvigatel, xotira yoqilg'i baki va PHP-FPM flot dispetcheri hisoblanadi.
Dvigatel qanchalik kuchli bo'lmasin, agar yonilg'i baki yetarlicha katta bo'lmasa, karvon uzoqqa bormaydi.
Haqiqiy mutaxassislar parametrlarni ko'r-ko'rona maksimal darajada oshirib yubormaydilar, balki isrofgarchilik va toshib ketishning oldini olish uchun har bir jarayonning xotira sarfini aniq hisoblaydilar.
Optimallashtirishning mohiyati cheklangan resurslar bilan optimal muvozanatni topishdir.
Bu nafaqat texnologiya, balki falsafa hamdir.
Shuning uchun, "yadrolar soni hamma narsani belgilaydi" degan fikrga ishonishni bas qiling. Parallellik chegarasini chindan ham belgilaydigan narsa bu sizning xotira ustidan nazoratingizdir.
Har bir xotira tomchisidan maksimal darajada foydalanib, VPS-ni to'liq potentsialiga moslashtiring va choralar ko'ring.
Umid qilamanki, Chen Weiliangning blogida ( https://www.chenweiliang.com/ ) ulashilgan "8 yadroli 24GB VPS xotirasi tugab bormoqdami? HestiaCP ostida PHP-FPM jarayonlar pulining ekstremal sozlanishi" maqolasi siz uchun foydali bo'ladi.
Ushbu maqola havolasini ulashing: https://www.chenweiliang.com/cwl-34509.html
