Adresár článkov
- 1 Hlavný dôvod, prečo je PHP-FPM preťažený
- 2 Optimalizácia procesného fondu PHP-FPM (úprava základných parametrov)
- 3 Povoľte monitorovanie stavu PHP-FPM, aby ste mohli kedykoľvek sledovať priebeh
- 4 Optimalizujte protokoly PHP-FPM na rýchle riešenie problémov
- 5 Pravidelne reštartujte PHP-FPM, aby ste zabránili úniku pamäte
- 6 Čo ak problém pretrváva? Ďalšia optimalizácia!
- 7 Zhrnutie: Optimalizujte PHP-FPM a web už nebude padať!
Stretli ste sa už s touto situáciou?Prístup na webovú stránku sa náhle spomalil alebo dokonca viedol k chybe 500 Po reštarte PHP-FPM sa vrátil do normálu., ale problém sa po chvíli znova objaví? To je tak frustrujúce!
Prečo sa to deje?V skutočnosti je to zvyčajneProcesná oblasť PHP-FPM nie je správne nakonfigurovaná alebo sú zdroje servera nedostatočné.spôsobené. Dnes budeme dôkladne optimalizovať HestiaCP PHP-FPM pod kapotou robí webovú stránku stabilnou ako skala!
Hlavný dôvod, prečo je PHP-FPM preťažený
PHP-FPM je aManažér procesov, ktorý je zodpovedný za spracovanie dynamických požiadaviek. Ak konfigurácia nie je primeraná, môže to 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, ako tieto procesy zaberajú viac ako 70 % CPU? Ak sa to stáva často, váš PHP-FPM Musí tam byť problém!
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.3, 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.3
To znamená, že stránka používa PHP 8.3.
Pozrime sa na vašu konfiguráciu PHP-FPM:
[chenweiliang.com]
listen = /run/php/php8.3-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.
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 ondemanda 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 进程最大内存占用
To môže niektorým zabrániťPHP skripty, ktoré využívajú príliš veľa CPU, môžu zničiť váš server.
Po uložení reštartujte proces PHP:
sudo systemctl restart php8.3-fpmPovoľte monitorovanie stavu PHP-FPM, aby ste mohli kedykoľvek sledovať priebeh
Povoľte monitorovanie procesov PHP-FPM a kedykoľvek si ho prezerajteAktuálny počet aktívnych procesov a stav čakania na požiadavku, aby nedošlo k 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.3-fpm restart
Čo ak problém pretrváva? Ďalšia optimalizácia!
Ak stále dodržiavate vyššie uvedenú optimalizáciuObčas sa vyskytne 500 chýb, môžete pokračovať v nasledujúcich optimalizáciách:
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.3-opcache -y
Potom upravte php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
efekt? 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ť! 💪🚀
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) shared "Zaťaženie HestiaCP PHP-FPM je príliš vysoké? Chyba dynamickej webovej stránky 500? Táto optimalizácia sa prejaví okamžite! “, môže vám to pomôcť.
Vitajte pri zdieľaní odkazu na tento článok:https://www.chenweiliang.com/cwl-32512.html
Ak chcete odomknúť ďalšie skryté triky🔑, pridajte sa k nášmu Telegram kanálu!
Ak sa vám páči, zdieľajte a lajkujte! Vaše zdieľania a lajky sú našou neustálou motiváciou!