Adresář článků
- 1 Hlavní důvod, proč je PHP-FPM přetíženo
- 2 Optimalizace procesního fondu PHP-FPM (úprava základních parametrů)
- 3 Povolte sledování stavu PHP-FPM, abyste mohli kdykoli sledovat průběh
- 4 Optimalizujte protokoly PHP-FPM pro rychlé řešení problémů
- 5 Pravidelně restartujte PHP-FPM, abyste zabránili úniku paměti
- 6 Co když problém přetrvává? Další optimalizace!
- 7 Shrnutí: Optimalizujte PHP-FPM a web již nebude padat!
Setkali jste se někdy s touto situací?Přístup k webu se náhle zpomalil, nebo dokonce vedl k chybě 500 Po restartu PHP-FPM se vrátil do normálu., ale problém se po chvíli znovu objeví? To je tak frustrující!
Proč se toto děje?Ve skutečnosti to tak obvykle jeProcesní fond PHP-FPM není správně nakonfigurován nebo jsou prostředky serveru nedostatečné.způsobené. Dnes budeme důkladně optimalizovat HestiaCP PHP-FPM pod kapotou dělá web stabilní jako skála!
Hlavní důvod, proč je PHP-FPM přetíženo
PHP-FPM je aSprávce procesů, který je zodpovědný za zpracování dynamických požadavků. Pokud konfigurace není rozumná, může to vést k:
- Prostředky serveru jsou vyčerpány, což způsobuje, že PHP-FPM není schopen reagovat na nové požadavky včas;
- Příliš málo procesů, když se návštěvnost náhle zvýší, nelze ji včas zpracovat;
- Využití procesu je příliš vysoké, což způsobí explozi zátěže CPU.

Jak zjistit, zda je PHP-FPM přetíženo?
může použít top Nebo htop Příkaz pro zobrazení využití CPU a paměti:
top -c
Pokud vidíte informace o procesu podobné následujícím, znamená to, že PHP-FPM běží pod vysokou zátěží:
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, jak tyto procesy zabírají více než 70 % CPU? Pokud se to stává často, váš PHP-FPM Musí tam být problém!
Jak tedy můžeme optimalizovat konfiguraci PHP-FPM, aby server již nebyl přetížen?
Optimalizace procesního fondu PHP-FPM (úprava základních parametrů)
Nejprve otevřete php-fpm Konfigurační soubory:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Změňte verzi PHP na PHP8.3 a změňte ji na toto:
/etc/php/8.3/fpm/pool.d/www.conf
Dotaz na verzi PHP nastavenou programem HestiaCP
v-list-web-domain user domain.com
Např:
v-list-web-domain abc chenweiliang.com
Ve výstupu uvidíte něco jako:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
To znamená, že web používá PHP 8.3.
Pojďme se podívat na vaši konfiguraci 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 vidět, že vaše pm Ten použitý je ondemand,Ačkoli to může snížit využití zdrojů během doby nečinnosti, když se provoz náhle zvýší, proces nemusí být schopen včas reagovat.výsledkem je chyba 500.
1. Upravte parametry procesního fondu PHP-FPM
Pokud konfigurace používá dynamicJedná se o metodu předběžného spuštění některých pracovních procesů a jejich dynamického přizpůsobení podle objemu požadavků, což umožňuje rychleji reagovat, když se objem požadavků náhle zvýší.
Pro webové stránky s určitou návštěvností se doporučuje používat pm = dynamicProtože dokáže udržovat určitý počet nečinných procesů a vyhnout se 500 chybám během vysoké souběžnosti.
Doporučuje se jej používat pouze v případě, že je přístupový objem extrémně nízký a paměťové zdroje jsou omezené. pm = ondemand Aby se šetřily zdroje.
Doporučeno změnit na ondemanda optimalizovat pm.max_children A další parametry:
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 后自动退出
Proč to chceš takhle změnit?
pm = dynamic: Přidělujte procesy flexibilněji, abyste se vyhnuli čekání na požadavky, které může být způsobeno ondemand;pm.max_children = 16: Zabránit 500 chybám způsobeným příliš malým počtem procesů;pm.start_servers = 5: Vyhněte se pomalému spouštění procesu;pm.max_requests = 3000:Prevence úniků paměti, proces pravidelně recyklujte.
2. Omezte dobu provádění PHP skriptů, abyste zabránili dlouhodobému obsazení
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
To může některým zabránitPHP skripty, které využívají příliš mnoho CPU, mohou zničit váš server.
Po uložení restartujte proces PHP:
sudo systemctl restart php8.3-fpmPovolte sledování stavu PHP-FPM, abyste mohli kdykoli sledovat průběh
Povolte monitorování procesu PHP-FPM a kdykoli si jej prohlédněteAktuální počet aktivních procesů a stav čekání na požadavek, aby nedošlo k přetížení serveru.
在 php-fpm.conf Přidáno v:
pm.status_path = /status
Poté konfigurace 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 způsobem můžete http://yourdomain.com/status Podívejte se na PHP-FPM v akci!
Optimalizujte protokoly PHP-FPM pro rychlé řešení problémů
在 php-fpm.conf 添加:
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 způsobem, kdykoli dojde k chybě 500, můžete přímo zobrazit protokol:
tail -f /var/log/php-fpm/error.log
Podívejte se, zda PHP nehlásí chybu, jako např out of memory,script execution timeout Počkejte.
Pravidelně restartujte PHP-FPM, abyste zabránili úniku paměti
schopný projít cron Pravidelně restartujte PHP-FPM, abyste zabránili způsobení dlouhotrvajících procesůÚniky paměti.
crontab -e
Přidejte následující naplánovanou úlohu pro automatické restartování PHP-FPM každý den ve 3:XNUMX:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Co když problém přetrvává? Další optimalizace!
Pokud stále dodržujete výše uvedenou optimalizaciObčas se vyskytne 500 chyb, můžete pokračovat s následujícími optimalizacemi:
1. Povolte OPcache pro zlepšení efektivity provádění PHP
Pokud OPcache ještě není povolena, můžete ji nainstalovat takto (použijte Ubuntu jako příklad):
sudo apt install php8.3-opcache -y
Poté upravte php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Účinek? Rychlost spouštění stránek PHP se výrazně zlepšila!
2. Optimalizace konfigurace Nginx
Ujistěte se, že parametry související s Nginx jsou rozumné, jako např fastcgi_read_timeout Upravte jej vhodně, aby nedošlo k ukončení skriptů PHP ze strany Nginx kvůli dlouhé době provádění:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Shrnutí: Optimalizujte PHP-FPM a web již nebude padat!
Jaké úpravy jsme provedli po této optimalizaci?
(Tj. Optimalizace fondu procesů PHP-FPM,použití ondemandA optimalizovat pm.max_children parametr;
(Tj. Omezení doby provádění PHP skriptů, aby se zabránilo dlouhodobému obsazení CPU;
(Tj. Povolit monitorování PHP-FPM, zobrazit zatížení procesu v reálném čase;
(Tj. Optimalizace protokolů PHP-FPM, rychle odstranit 500 chyb;
(Tj. Pravidelně restartujte PHP-FPM, zabránit únikům paměti;
(Tj. Povolit OPcache, zlepšit efektivitu provádění PHP;
(Tj. Optimalizace konfigurace Nginx, abyste se vyhnuli problémům s časovým limitem.
Po této optimalizaci se výrazně sníží zatížení PHP-FPM a provoz webu bude stabilnější! 🔥
Jdi to zkusit hned teď! 💪🚀
Blog Hope Chen Weiliang ( https://www.chenweiliang.com/ ) shared "HestiaCP PHP-FPM zatížení je příliš vysoké? Chyba dynamické webové stránky 500? Tato optimalizace se projeví okamžitě! “, může vám to pomoci.
Vítejte u sdílení odkazu na tento článek:https://www.chenweiliang.com/cwl-32512.html
Chcete-li odemknout další skryté triky🔑, připojte se k našemu telegramovému kanálu!
Sdílejte a lajkujte, pokud se vám to líbí! Vaše sdílení a lajky jsou naší další motivací!