Diréktori Tulisan
Jumlah pangguna sakaligus anu tiasa diurus ku server henteu gumantung kana sabaraha inti anu dipiboga, tapi kana sabaraha mémori anu dianggo ku unggal prosés.
Pernyataan ieu sigana mah provokasi, tapi ieu mangrupikeun pangalaman anu paling nyata sareng nyeri dina industri operasi sareng pangropéa.
Naha kunaon mémori téh jadi halangan utama?
Seueur jalmi ningali VPS kalayan CPU 8-inti sareng mémori 24GB sareng sacara teu sadar mikir yén aranjeunna tiasa kalayan gampang ngajalankeun ratusan prosés PHP-FPM.
Nanging, kanyataanna, panggunaan mémori RSS pikeun hiji prosés PHP sering dugi ka 200MB.
Ieu hasil anu diala ngaliwatan uji coba anu saleresna ngalangkungan baris paréntah:
ps --no-headers -o rss -p $(pgrep php-fpm) | awk '{sum+=$1} END {print sum/NR/1024 " MB"}'
Dina lingkungan kerangka kerja sareng multi-plugin HestiaCP anu rumit, khususna tanpa optimasi OPcache, 200MB mangrupikeun hal anu biasa.
Ieu ngandung harti yén mémori, sanés CPU, mangrupikeun wates anu nangtukeun konkurénsi maksimum.

File konfigurasi anu disarankeun (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
Logika itungan parameter sareng dasar setélan
| Parameter konfigurasi | Nilai setélan | Itungan inti sareng dasar setelan |
|---|---|---|
| pm | dynamic | Modeu dinamis ngamungkinkeun panambahan atanapi panghapusan prosés sacara élastis dumasar kana sarat konkurénsi, kasaimbangan kecepatan réspon, sareng panggunaan mémori. |
| pm.max_children | 80 | Mémori total 24GB dikurangan kernel sistem sareng MySQL/RedisSaatos Nginx, sakitar 16GB sésana kanggo PHP.16,384 MB / 200 MB ≈ 81.9Nyetélna ka 80 tiasa ngaleungitkeun OOM (Out of Memory) salami konkurénsi anu luhur. |
| pm.start_servers | 16 | Pemanasan awal nalika ngamimitian disetel ka dua kali jumlah inti CPU (8 inti × 2 = 16) pikeun mastikeun yén layanan tiasa langsung nanganan konkurénsi dasar saatos ngamimitian deui. |
| pm.min_spare_servers | 8 | Setel jumlah inti CPU ka 8 inti pikeun mastikeun yén pamundut énggal tiasa diwaler iraha waé salami periode lalu lintas sepi. |
| pm.max_spare_servers | 24 | Setel ka 3 kali jumlah inti CPU (8 inti × 3 = 24) pikeun nahan jumlah prosés anu sedeng saatos lalu lintas surut, supados tiasa nanganan fluktuasi anu hampang. |
| pm.max_requests | 500 | Upami hiji prosés ngahontal ukuran dasar anu ageung nyaéta 200MB, ngirangan jumlah pamundut ka 500 bakal ngancurkeun sareng ngawangun deui prosés éta, anu tiasa ngabersihkeun bocor mémori implisit langkung gancang. |
| pm.process_idle_timeout | 10s | 超出 min_spare_servers Prosés nganggur sacara otomatis dileupaskeun sareng dipulangkeun deui ka mémori sistem saatos 10 detik teu aya pamundut. |
Setélan Pangrojong Penting sareng Saran Optimasi
1. Mékanisme anti-mabuk timeout
request_terminate_timeout = 60s Éta konci na.
Éta tiasa sacara paksa ngeureunkeun prosés anu macét kusabab deadlock database atanapi blokir API pihak katilu.
Samentara éta, Nginx fastcgi_read_timeout Éta kedah disimpen sahenteuna 60 detik, upami henteu klien bakal nampi éta sateuacan waktuna. 504 Gateway Timeout.
2. Strategi pikeun ngungkulan halangan mémori
Maksimum 80 prosés sakaligus hartina dina kaayaan sakaligus anu ekstrim, sistem ieu tiasa nanganan maksimal 80 pamundut HTTP dinamis sacara babarengan.
Upami anjeun hoyong ningkatkeun kapasitas langkung jauh, fokusna kedah kana ngirangan panggunaan mémori per prosés.
- Aktipkeun OPcache:di
php.iniKonfigurasi sedengopcache.enable=1jeungopcache.memory_consumption=256Caching bytecode tiasa ngirangan panggunaan mémori hiji prosés ti 200MB janten 60 ~ 100MB. - Kontrol memory_limit anu wajar:将
php.initengahnamemory_limitDiwatesan ku128MAtanapi256MPikeun nyegah skrip abnormal individuteu aya watesnaÉta nyéépkeun seueur mémori.
Sakali panggunaan mémori hiji prosés turun ka 100MB...pm.max_children Éta tiasa diropéa kalayan aman ka 150 Salian ti éta, kamampuan konkurénsi ampir dua kali lipat.
Sudut pandang otoritatif anu disebatkeun
Numutkeun kana rekomendasi dina dokuméntasi resmi Nginx :
"Aplikasi FastCGI kedah teras diawasi nganggo arahan timeout pikeun nyegah sumber daya béak."
(Sumber: Dokumén Nginx)
Manual PHP resmi sacara jelas nyatakeun:
"pm.max_children ngahartikeun jumlah maksimum prosés anak anu kedah didamel. Ieu mangrupikeun arahan anu paling penting."
(Sumber: Dokumentasi PHP-FPM)
Pamadegan otoritatif ieu saluyu pisan sareng prakték urang, ngabuktikeun yén logika optimasi henteu ngan ukur dumasar kana pangalaman, tapi ogé kana prakték pangsaéna anu distandarisasi.
Kacindekan: Sudut Pandang sareng Kutipan Kunci Kuring
Dina skenario konkurénsi anu luhur, CPU nyaéta mesinna, mémori nyaéta tangki bahan bakarna, sareng PHP-FPM nyaéta operator armada.
Sanajan mesinna kuat sakumaha ogé, lamun tangki bahan bakarna teu cukup badag, konvoi moal bisa indit jauh.
Para ahli sajati henteu sacara buta ngamaksimalkeun parameter, tapi sacara akurat ngitung panggunaan mémori unggal prosés pikeun nyingkahan runtah sareng kaleuwihan.
Inti tina optimasi nyaéta pikeun mendakan kasaimbangan anu optimal kalayan sumber daya anu terbatas.
Ieu sanés ngan ukur téknologi, tapi ogé filosofi.
Ku kituna, eureunkeun percaya yén "jumlah inti nangtukeun sagalana." Anu leres-leres nangtukeun wates konkurénsi nyaéta kontrol anjeun kana mémori.
Laksanakeun tindakan sareng optimalkeun VPS anjeun sacara maksimal, ngamangpaatkeun unggal tetes mémori.
Mudah-mudahan, tulisan "8-core 24GB VPS kehabisan memori? Extreme tuning of PHP-FPM process pool under HestiaCP" anu dibagikeun dina blog Chen Weiliang ( https://www.chenweiliang.com/ ) bakal aya mangpaatna pikeun anjeun.
Mangga bagikeun tautan artikel ieu: https://www.chenweiliang.com/cwl-34509.html
