8 nüvəli 24GB VPS yaddaşı tükənir? HestiaCP-də həddindən artıq PHP-FPM proses hovuzu tənzimləməsi

Serverin idarə edə biləcəyi eyni vaxtda istifadəçilərin sayı onun neçə nüvəsindən deyil, hər bir prosesin nə qədər yaddaş istifadə etməsindən asılıdır.

Bu açıqlama təxribat kimi səslənə bilər, amma əməliyyatlar və texniki xidmət sənayesində ən real və ağrılı təcrübədir.

Niyə yaddaş əsas maneədir?

Bir çox insan 8 nüvəli prosessor və 24 GB yaddaşa malik VPS görür və şüuraltı olaraq yüzlərlə PHP-FPM prosesini asanlıqla işlədə biləcəklərini düşünür.

Lakin, əslində, tək bir PHP prosesinin RSS yaddaş istifadəsi çox vaxt 200MB-a qədər olur.

Bu, əmr sətri vasitəsilə faktiki test nəticəsində əldə edilən nəticədir:

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

HestiaCP -nin mürəkkəb çərçivəsi və çoxpluginli mühitində, xüsusən də OPcache optimallaşdırması olmadan, 200MB normadır.

Bu o deməkdir ki, maksimum paralelliyi müəyyən edən sərt hədd CPU deyil, yaddaşdır.

8 nüvəli 24GB VPS yaddaşı tükənir? HestiaCP-də həddindən artıq PHP-FPM proses hovuzu tənzimləməsi

Tövsiyə olunan konfiqurasiya faylı (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

Parametr hesablama məntiqi və qəbuletmə əsası

Konfiqurasiya parametrləriDəyərin təyin edilməsiƏsas hesablama və quraşdırma əsası
pmdynamicDinamik rejim, cavab sürətini və yaddaş istifadəsini balanslaşdıraraq, paralellik tələblərinə əsasən proseslərin elastik əlavə edilməsinə və ya silinməsinə imkan verir.
pm.max_uşaqlar80Sistem nüvəsi çıxılmaqla 24GB ümumi yaddaş və MySQL/RedisNginx-dən sonra PHP üçün təxminən 16GB qalır.16,384 MB / 200 MB ≈ 81.9Onu 80-ə təyin etmək, yüksək paralellik zamanı OOM-u (Yaddaş Out) tamamilə aradan qaldıra bilər.
pm.start_servers16Xidmətin yenidən başladıqdan sonra əsas paralelliyi dərhal idarə edə bilməsini təmin etmək üçün başlanğıcda əvvəlcədən qızdırma, CPU nüvələrinin sayının ikiqatına (8 nüvə × 2 = 16) təyin edilmişdir.
pm.min_ehtiyat_servers8Trafik az olan dövrlərdə istənilən vaxt yeni sorğuların cavablandırılmasını təmin etmək üçün CPU nüvələrinin sayını 8-ə təyin edin.
pm.max_spare_servers24Trafik geri çəkildikdən sonra orta sayda prosesi saxlamaq üçün prosessor nüvələrinin sayını 3 dəfəyə (8 nüvə × 3 = 24) təyin edin ki, yüngül dalğalanmaları idarə edə biləsiniz.
pm.max_istəklər500Əgər tək bir proses 200MB böyük bir bazaya çatarsa, sorğuların sayını 500-ə endirmək prosesi məhv edəcək və yenidən quracaq ki, bu da gizli yaddaş sızmalarını daha tez aradan qaldıra bilər.
pm.process_idle_timeout10s超出 min_spare_servers Boş proseslər avtomatik olaraq buraxılır və 10 saniyəlik sorğu olmadıqda sistem yaddaşına qaytarılır.

Əsas Dəstəkləyici Parametrlər və Optimallaşdırma Təklifləri

1. Asma əleyhinə mexanizmin vaxtaşırı

request_terminate_timeout = 60s Əsas budur.

Verilənlər bazasının bağlanması və ya üçüncü tərəf API bloklanması səbəbindən ilişib qalan prosesləri zorla dayandıra bilər.

Bu arada, Nginx-in fastcgi_read_timeout Ən azı 60 saniyə saxlanılmalıdır, əks halda müştəri onu vaxtından əvvəl alacaq. 504 Gateway Timeout.

2. Yaddaş çətinliklərini aradan qaldırmaq üçün strategiyalar

Maksimum 80 paralel proses, həddindən artıq paralellik şərtlərində sistemin eyni vaxtda maksimum 80 dinamik HTTP sorğusunu emal edə biləcəyi deməkdir.

Tutumu daha da artırmaq istəyirsinizsə, diqqət hər proses üçün yaddaş istifadəsini azaltmağa yönəldilməlidir.

  • OPcache-i aktivləşdirin: 在 php.ini Orta konfiqurasiya opcache.enable=1opcache.memory_consumption=256Baytkod keşləməsi tək bir prosesin yaddaş istifadəsini 200MB-dan 60~100MB-a qədər azalda bilər.
  • Yaddaş_limiti üçün ağlabatan nəzarət:将 php.ini orta memory_limit Məhduddur 128M Və ya 256MFərdi anormal ssenarilərin qarşısını almaq üçünLimitsizÇox yaddaş sərf edir.

Tək bir prosesin yaddaş istifadəsi 100MB-a düşdükdən sonra...pm.max_children Təhlükəsiz şəkildə təkmilləşdirilə bilər 150 Bundan əlavə, paralellik qabiliyyəti demək olar ki, iki dəfə artmışdır.

Səlahiyyətli baxışlar sitat gətirilib

Rəsmi Nginx sənədlərindəki tövsiyələrə əsasən :

"Resursların tükənməsinin qarşısını almaq üçün FastCGI tətbiqləri həmişə zaman aşımı direktivləri ilə izlənilməlidir."
(Mənbə: Nginx Sənədləri)

Rəsmi PHP təlimatında aydın şəkildə deyilir:

"pm.max_children yaradılacaq uşaq proseslərinin maksimum sayını təyin edir. Bu, ən vacib direktivdir."
(Mənbə: PHP-FPM Sənədləri)

Bu mötəbər baxışlar təcrübələrimizlə mükəmməl şəkildə uyğunlaşır və optimallaşdırma məntiqinin yalnız təcrübəyə deyil, həm də standartlaşdırılmış ən yaxşı təcrübələrə əsaslandığını sübut edir.

Nəticə: Mənim Baxışlarım və Əsas Sitatlarım

Yüksək paralellik ssenarilərində CPU mühərrik, yaddaş yanacaq çəni və PHP-FPM donanma dispetçeridir.

Mühərrik nə qədər güclü olsa da, yanacaq çəni kifayət qədər böyük deyilsə, karvan çox uzağa getməyəcək.

Əsl mütəxəssislər parametrləri kor-koranə şəkildə maksimuma çatdırmırlar, əksinə həm israfın, həm də daşqının qarşısını almaq üçün hər bir prosesin yaddaş istifadəsini dəqiq hesablayırlar.

Optimallaşdırmanın mahiyyəti məhdud resurslarla optimal tarazlığı tapmaqdır.

Bu, təkcə bir texnologiya deyil, həm də bir fəlsəfədir.

Buna görə də, "nüvələrin sayı hər şeyi müəyyən edir" deyə düşünməyi dayandırın. Paralellik limitini həqiqətən müəyyən edən şey yaddaş üzərində nəzarətinizdir.

Hər damla yaddaşdan maksimum dərəcədə istifadə edərək, VPS-inizi tam potensialına uyğun olaraq optimallaşdırın və tədbir görün.

发表 评论

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

Top gedin