Məqalələr kataloqu
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.

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əri | Dəyərin təyin edilməsi | Əsas hesablama və quraşdırma əsası |
|---|---|---|
| pm | dynamic | Dinamik 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şaqlar | 80 | Sistem 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_servers | 16 | Xidmə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_servers | 8 | Trafik 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_servers | 24 | Trafik 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ər | 500 | Ə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_timeout | 10s | 超出 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.iniOrta konfiqurasiyaopcache.enable=1∫opcache.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.iniortamemory_limitMəhduddur128MVə ya256MFə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.
Ümid edirəm ki, Chen Weiliang-ın bloqunda ( https://www.chenweiliang.com/ ) paylaşılan "8 nüvəli 24G VPS yaddaşdan çıxır? HestiaCP altında PHP-FPM proses hovuzunun həddindən artıq tənzimlənməsi" məqaləsi sizə faydalı olacaq.
Bu məqalənin linkini paylaşmaqdan çəkinməyin: https://www.chenweiliang.com/cwl-34509.html
