8 yadroli 24GB VPS xotirasi tugab qoldimi? HestiaCP yordamida PHP-FPM jarayonlar pulini ekstremal sozlash bo'yicha amaliy qo'llanma

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.

8 yadroli 24GB VPS xotirasi tugab qoldimi? HestiaCP yordamida PHP-FPM jarayonlar pulini ekstremal sozlash bo'yicha amaliy qo'llanma

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 parametrlariQiymatni sozlashAsosiy hisoblash va o'rnatish asoslari
pmdynamicDinamik rejim parallellik talablariga asoslanib, javob tezligi va xotiradan foydalanishni muvozanatlashtirib, jarayonlarni elastik qo'shish yoki o'chirish imkonini beradi.
pm.max_children80Tizim 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_servers16Xizmat 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_servers8Trafik kam bo'lgan davrlarda yangi so'rovlarga istalgan vaqtda javob berilishi uchun protsessor yadrolari sonini 8 taga o'rnating.
pm.max_spare_servers24Yengil 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_requests500Agar 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_timeout10sOshib 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.ini O'rta konfiguratsiya opcache.enable=1 va opcache.memory_consumption=256Baytkod keshlash bitta jarayonning xotira sarfini 200MB dan 60~100MB gacha kamaytirishi mumkin.
  • Memory_limitni oqilona boshqarish:Villi php.ini o'rta memory_limit Cheklangan 128M Yoki 256MAlohida 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.

发表 评论

língíngíngíngíngíngíngíngíngíngíngíngíngín *​​

Top o'ting