Adresár článkov
Stretli ste sa už niekedy s touto situáciou? Vaša webová stránka sa náhle spomalí alebo dokonca vyhodí chybu 500. Reštartovanie PHP-FPM ju obnoví do normálu , ale problém sa po chvíli znova objaví? Je to neuveriteľne frustrujúce!
Prečo sa to deje? V skutočnosti je to zvyčajne spôsobené nesprávnou konfiguráciou procesného poolu PHP-FPM alebo nedostatočným množstvom serverových zdrojov . Dnes dôkladne optimalizujeme PHP-FPM pod HestiaCP , aby sme zabezpečili maximálnu stabilitu vašej webovej stránky!
Hlavný dôvod, prečo je PHP-FPM preťažený
PHP-FPM je správca procesov pre PHP , ktorý je zodpovedný za spracovanie dynamických požiadaviek. Nesprávna konfigurácia môže viesť k:
- Zdroje servera sú vyčerpané, čo spôsobuje, že PHP-FPM nie je schopné reagovať na nové požiadavky včas;
- Príliš málo procesov, keď sa návštevnosť náhle zvýši, nie je možné ju včas spracovať;
- Využitie procesu je príliš vysoké, čo spôsobí explóziu záťaže CPU.

Ako zistiť, či je PHP-FPM preťažený?
môcť použiť top alebo htop Príkaz na zobrazenie využitia CPU a pamäte:
top -c
Ak vidíte informácie o procese podobné nasledujúcim, znamená to, že PHP-FPM beží pod vysokým zaťažením:
1669293 abc 20 0 790284 227880 185568 R 73.1 0.9 1:30.09 php-fpm: pool chenweiliang.com
1669522 abc 20 0 801924 224224 170236 R 69.9 0.9 0:59.01 php-fpm: pool chenweiliang.com
Vidíte, že tieto procesy využívajú viac ako 70 % CPU? Ak sa to stáva často, potom je s vaším PHP-FPM určite niečo v neporiadku!
Ako teda môžeme optimalizovať konfiguráciu PHP-FPM tak, aby server už nebol preťažený?
Optimalizácia procesného fondu PHP-FPM (úprava základných parametrov)
Najprv otvorte php-fpm Konfiguračné súbory:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Zmeňte verziu PHP na vašu, napríklad PHP8.5, a zmeňte ju na toto:
/etc/php/8.3/fpm/pool.d/www.conf
Dotaz na verziu PHP nastavenú HestiaCP
v-list-web-domain user domain.com
napríklad:
v-list-web-domain abc chenweiliang.com
Vo výstupe uvidíte niečo ako:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.5 To znamená, že webová stránka používa PHP 8.5.
Pozrime sa na vašu konfiguráciu PHP-FPM:
[chenweiliang.com]
listen = /run/php/php8.5-fpm-chenweiliang.com.sock
listen.owner = abc
listen.group = www-data
listen.mode = 0660
user = abc
group = abc
pm = ondemand
pm.max_children = 8
pm.max_requests = 4000
pm.process_idle_timeout = 10s
Môžete vidieť, že vaše pm Ten použitý je ondemand,Hoci to môže znížiť spotrebu zdrojov počas nečinnosti, keď sa návštevnosť náhle zvýši, proces nemusí byť schopný včas reagovať.výsledkom je chyba 500.
www.conf: V systéme zabudovaný „univerzálny fond zdrojov“
Po nainštalovaní PHP-FPM vám systém automaticky poskytne... www.conf dokument.
jehopozíciuJe to veľmi jednoduché – je to len predvolený fond procesov, ktorý funguje ihneď po vybalení, zvyčajne pripojený k... www-Data Stiahnutie používateľom.
Tento typ fondu je obzvlášť vhodný pre prostredia s jedným miestom: konfigurácia je jednoduchá a parametre sú všetky generické šablóny, ako napríklad:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Ak hostujete iba jednu stránku, môžete ju používať priamo a spoľahlivo bez akýchkoľvek ďalších problémov.
etUFO.org.conf: Vlastný fond
Keď prevádzkujete viacero stránok, nemôžete všetkých natlačiť do toho istého poolu.
V tomto bode HestiaCP automaticky vytvorí samostatný pool pre každú stránku, napríklad... etUFO.org.confŠpecializované na doménové mená etufo.org 服务.
Bežný spôsob hrania je:
- Zmeniť používateľov a skupiny:
user = etufo,group = etufo - Nezávislé monitorovanie:
listen = /run/php/etufo.sock - Úprava počtu procesov zaisťuje pevnú stabilitu aj pri vysokej súbežnosti.
- Samostatné súbory protokolov uľahčujú riešenie problémov.
Výhody sú zrejmé: bezpečná izolácia . Aj keď je jedna stránka napadnutá, ostatné zostanú nedotknuté.
dummy.conf: súbor s fiktívnou úlohou
dummy.conf Zvyčajne ide o príklady alebo šablóny poskytované systémom.
V skutočnosti sa nespustí, pokiaľ ho manuálne neupravíte a nepovolíte.
Jeho význam je skôr ako „prevádzková príručka“, ktorá vám povie, ako napísať novú konfiguráciu bazéna.
Prečo rozdeliť bazén?
- 安全 性Používajte rôznych používateľov pre rôzne stránky, aby ste predišli konfliktom oprávnení.
- 性能优化Počet procesov je možné upraviť individuálne pre každý pool, čo umožňuje flexibilné úpravy na základe dopytu po prevádzke.
- IzoláciaZáznamy, chyby a adresy počúvania sú oddelené, čo uľahčuje riešenie problémov.
Napríklad, aj keď sa súbor www.conf zrúti, súbor etufo.org.conf bude stále bežať normálne a nespôsobí výpadok celého servera.
实际场景
- Server s jednou lokalitouStačí www.conf.
- Viacmiestne serveryKaždá stránka má svoj vlastný nezávislý súbor .conf, napríklad etufo.org.conf.
- dummy.confLen pre informáciu, neodporúča sa.
Porovnanie konfigurácie
www.conf (predvolený fond)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Vlastný fond)
[etufo.org]
user = etufo
group = etufo
listen = /run/php/etufo.sock
pm = dynamic
pm.max_children = 20
access.log = /var/log/php-fpm/etufo.access.log
Hlavné rozdiely sú: identita používateľa, adresa počúvania a počet procesov.
1. Upravte parametre procesnej oblasti PHP-FPM
Ak konfigurácia používa dynamicIde o metódu predbežného spustenia niektorých pracovných procesov a ich dynamického prispôsobovania podľa objemu požiadaviek, čo umožňuje rýchlejšie reagovať, keď sa objem požiadaviek náhle zvýši.
Pre webové stránky s určitou návštevnosťou sa odporúča použiť pm = dynamicPretože dokáže udržiavať určitý počet nečinných procesov a vyhnúť sa 500 chybám počas vysokej súbežnosti.
Odporúča sa ho používať iba vtedy, keď je objem prístupu extrémne nízky a pamäťové zdroje sú obmedzené. pm = ondemand Aby sa šetrili zdroje.
Odporúča sa dynamica optimalizovať pm.max_children A ďalšie parametre:
pm = dynamic
pm.max_children = 16 ; 根据服务器资源调整,建议值:CPU 核心数 × 2
pm.start_servers = 4 ; 初始进程数,建议设为 max_children × 25%
pm.min_spare_servers = 2 ; 最小空闲进程数
pm.max_spare_servers = 7 ; 最大空闲进程数
pm.max_requests = 3000 ; 每个子进程处理完 3000 个请求后自动重启
pm.process_idle_timeout = 10s ; 空闲进程 10s 后自动退出
Prečo to chceš takto zmeniť?
pm = dynamic: Prideľujte procesy flexibilnejšie, aby ste sa vyhli čakaniu na požiadavku, ktoré môže byť spôsobené dopytom;pm.max_children = 16: Zabráňte 500 chybám spôsobeným príliš malým počtom procesov;pm.start_servers = 5: Vyhnite sa pomalému spúšťaniu procesu;pm.max_requests = 3000:Zabránenie úniku pamäte, proces pravidelne recyklujte.
2. Obmedzte čas vykonávania PHP skriptov, aby ste zabránili dlhodobému obsadeniu
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Toto zabraňuje niektorým PHP skriptom, ktoré nadmerne spotrebúvajú CPU, aby spôsobili pád servera.
Po uložení reštartujte proces PHP:
sudo systemctl restart php8.3-fpmOptimalizujte PHP-FPM na základe konfigurácie VPS
Príklad konfigurácie VPS:
- Popis: VPS 3 NVMe
- Miesto na disku: 300 GB
- Jadrá CPU: 8
- RAM: 24 GB
Na základe konfigurácie vášho VPS ( 8 jadier CPU, 24 GB RAM ) sú zdroje vášho servera viac než postačujúce. Pre PHP-FPM vám 24 GB RAM umožňuje nakonfigurovať veľmi vysoký počet súbežných procesov.
V produkčnom prostredí zvyčajne alokujeme dostatok pamäte (napríklad 8 GB – 12 GB) pre samotný systém, databázy Apache (ako napríklad MySQL /MariaDB) a vyrovnávacie pamäte (ako napríklad Redis / Memcached ), pričom zvyšných 12 GB – 16 GB pamäte ponecháme na plne alokované pre PHP-FPM.
Na základe priemerného využitia pamäte 40 MB – 60 MB na jeden PHP proces môže 1 GB pamäte spustiť približne 16 – 25 procesov.
Nasleduje konfigurácia FPM s vysokou súbežnosťou a vysokým výkonom , prispôsobená pre vás , ktorá môže výrazne zlepšiť kapacitu WordPressu a zabrániť jeho pádom v dôsledku náhlych nárastov návštevnosti:
pm = dynamic
; 允许的最大 PHP 进程数(12GB 内存 / 40MB ≈ 300)
; 8核CPU搭配300个进程,可以轻松应对极高并发,且不至于让内存溢出
pm.max_children = 300
; 启动时创建的初始进程数(CPU核心数 * 4)
pm.start_servers = 32
; 维持的最小空闲进程数(服务器空闲时保留的进程,保证随时响应)
pm.min_spare_servers = 16
; 维持的最大空闲进程数(超过这个数量的空闲进程会被释放)
pm.max_spare_servers = 64
; 每个进程处理1000个请求后自动重启,高配置服务器可适当调大,有效防止WP插件内存泄露
pm.max_requests = 1000
; 单个请求最大执行时间,超时60秒强杀,防止死锁卡死
request_terminate_timeout = 60s
; 慢日志路径及触发阈值(请求超过5秒则记录,用于排查性能瓶颈)
slowlog = /var/log/php8.5-fpm.log.slow
request_slowlog_timeout = 5s
💡 Prečo práve táto konfigurácia?
pm.max_children = 300Toto je optimalizácia jadra. Vaša predchádzajúca konfigurácia 50 procesov bola príliš konzervatívna pre 24 GB pamäte. Pri náhlych nárastoch prevádzky (alebo botoch zahlcujúcich pozadie) by bolo 50 procesov okamžite preťažených, čo by spôsobilo vypršanie časového limitu pripojenia. Zvýšenie na 300 môže niekoľkonásobne zlepšiť kapacitu spracovania súbežných procesov vášho servera.pm.start_servers/ `min_spare_serversKeďže máte 8 jadier CPU, môžete si spočiatku a zvyčajne ponechať viac nečinných procesov, čo vám umožňuje využiť výhodu viacerých jadier, aby sa nové požiadavky dali otvárať okamžite bez čakania na vytvorenie procesu.pm.max_requests = 1000Zvýšte hodnotu z 500 na 1000. Vaša pamäť je veľká a procesy nie je potrebné často reštartovať. Zvýšenie na 1000 môže znížiť spotrebu CPU spôsobenú častým ničením a vytváraním procesov.
Zobraziť pomalý záznam:
tail -f /var/log/php8.5-fpm.log.slowtail -f /var/log/php8.4-fpm.log.slow
Po vykonaní zmien nezabudnite reštartovať službu PHP-FPM, aby sa zmeny prejavili.
systemctl restart php8.5-fpmPovoľte monitorovanie stavu PHP-FPM, aby ste mohli kedykoľvek sledovať priebeh
Povolenie monitorovania procesov PHP-FPM vám umožňuje kedykoľvek zobraziť počet aktívnych procesov a stav čakania na požiadavky , čím sa zabráni preťaženiu servera.
在 php-fpm.conf Pridané v:
pm.status_path = /status
Potom konfigurácia Nginx:
location /status {
fastcgi_pass unix:/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
allow 127.0.0.1;
deny all;
}
Týmto spôsobom môžete http://yourdomain.com/status Vyskúšajte PHP-FPM v akcii!
Optimalizujte protokoly PHP-FPM na rýchle riešenie problémov
在 php-fpm.conf Pridať do:
php_admin_value[error_log] = /var/log/php-fpm/error.log
php_admin_value[log_errors] = On
php_admin_value[error_reporting] = E_ALL
slowlog = /var/log/php-fpm/slow.log
request_slowlog_timeout = 5s ; 执行超过 5s 的脚本记录到日志
Týmto spôsobom, kedykoľvek sa vyskytne chyba 500, môžete priamo zobraziť denník:
tail -f /var/log/php-fpm/error.log
Pozrite sa, či PHP nehlási chybu, ako napr out of memory,script execution timeout 等.
Pravidelne reštartujte PHP-FPM, aby ste zabránili úniku pamäte
schopný prejsť cron Pravidelne reštartujte PHP-FPM, aby ste zabránili vzniku dlhotrvajúcich procesovÚniky pamäte.
crontab -e
Pridajte nasledujúcu naplánovanú úlohu na automatické reštartovanie PHP-FPM každý deň o 3:XNUMX:
0 3 * * * /usr/sbin/service php8.5-fpm restart
Čo ak problém pretrváva? Ďalšia optimalizácia!
Ak sa vám po vykonaní vyššie uvedených optimalizácií stále občas zobrazuje chyba 500 , môžete pokračovať s nasledujúcimi optimalizáciami:
1. Povoľte OPcache, aby ste zlepšili efektivitu vykonávania PHP
Ak OPcache ešte nie je povolená, môžete ju nainštalovať takto (ako príklad použite Ubuntu):
sudo apt install php8.5-opcache -y
Potom upravte php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
- opcache.validate_timestamps=0
- Zakázať detekciu v reálnom časeZnížte počet operácií I/O v súborovom systéme a zlepšite výkon.
To však znamená, že po úprave súborov PHP musíte manuálne vymazať vyrovnávaciu pamäť (reštartovať službu PHP).
Po úprave konfigurácie musíte reštartovať službu PHP, aby sa zmeny prejavili.
sudo systemctl restart php<版本>-fpmefekt? Rýchlosť spúšťania stránky PHP sa výrazne zlepšila!
2. Optimalizácia konfigurácie Nginx
Uistite sa, že parametre súvisiace s Nginxom sú rozumné, ako napr fastcgi_read_timeout Vhodne ho upravte, aby ste predišli ukončeniu skriptov PHP zo strany Nginx z dôvodu dlhého času vykonávania:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Zhrnutie: Optimalizujte PHP-FPM a web už nebude padať!
Aké úpravy sme vykonali po tejto optimalizácii?
✅ Optimalizácia oblasti procesov PHP-FPM, použite ondemandA optimalizovať pm.max_children parameter;
✅ Obmedzenie času vykonávania PHP skriptov, aby sa zabránilo dlhodobému obsadeniu CPU;
✅ Povoliť monitorovanie PHP-FPM, zobraziť zaťaženie procesu v reálnom čase;
✅ Optimalizácia protokolov PHP-FPM, rýchlo odstrániť 500 chýb;
✅ Pravidelne reštartujte PHP-FPM, zabrániť úniku pamäte;
✅ Povoliť OPcache, zlepšiť efektivitu vykonávania PHP;
✅ Optimalizácia konfigurácie Nginx, aby ste sa vyhli problémom s časovým limitom.
Po tejto optimalizácii sa výrazne zníži zaťaženie PHP-FPM a prevádzka webu bude stabilnejšia! 🔥
Choď to teraz vyskúšať! 💪🚀
Ak sa stále chcete dozvedieť viac o prispôsobovaní šablón PHP-FPM pomocou HestiaCP, tento článok vám poskytne hlbšie pochopenie:
👉 Vlastná šablóna HestiaCP pre PHP-FPM: Tajomstvá optimalizácie výkonu v PHP 8.5 ▼
V tomto obsahu uvidíte:
- Techniky optimalizácie s vysokou súbežnosťou: Ako zlepšiť rýchlosť odozvy prostredníctvom rozumnej konfigurácie procesov.
- Riešenie bezpečnostnej izolácie: Vyhnite sa rizikám prístupu medzi stránkami a zaistite stabilitu účtu.
- Záznamy a monitorovanie: Používajte pomalé záznamy na lokalizáciu úzkych miest a neustále optimalizujte výkon webových stránok.
Dúfame, že článok „HestiaCP PHP-FPM Preťaženie? Dynamická webová stránka Error 500? Táto optimalizačná metóda prinesie okamžité výsledky!“ zdieľaný na blogu Chen Weilianga ( https://www.chenweiliang.com/ ) bude pre vás užitočný.
Neváhajte a zdieľajte odkaz na tento článok: https://www.chenweiliang.com/cwl-32512.html

