Artikel Directory
- 1 Kerneårsagen til, at PHP-FPM er overbelastet
- 2 PHP-FPM procespuljeoptimering (justering af kerneparameter)
- 3 Aktiver PHP-FPM-statusovervågning for at holde styr på fremskridtene til enhver tid
- 4 Optimer PHP-FPM-logfiler for hurtigt at fejlfinde problemer
- 5 Genstart PHP-FPM regelmæssigt for at forhindre hukommelseslækager
- 6 Hvad hvis problemet fortsætter? Yderligere optimering!
- 7 Resumé: Optimer PHP-FPM, og hjemmesiden vil ikke længere gå ned!
Har du nogensinde stødt på denne situation?Hjemmesideadgang blev pludselig langsommere eller resulterede endda i en 500-fejl Efter genstart af PHP-FPM vendte den tilbage til normal., men problemet dukker op igen efter et stykke tid? Det er så frustrerende!
Hvorfor sker dette?Faktisk er dette normaltPHP-FPM-procespuljen er ikke konfigureret korrekt, eller serverressourcerne er utilstrækkelige.forårsaget af. I dag vil vi optimere grundigt HestiaCP PHP-FPM installeret gør hjemmesiden så stabil som en sten!
Kerneårsagen til, at PHP-FPM er overbelastet
PHP-FPM er enProcesleder, som er ansvarlig for at håndtere dynamiske anmodninger. Hvis konfigurationen ikke er rimelig, kan det føre til:
- Serverressourcer er opbrugt, hvilket får PHP-FPM til ikke at være i stand til at svare på nye anmodninger rettidigt;
- For få processer, når trafikken pludselig stiger, kan den ikke behandles i tide;
- Procesforbruget er for højt, hvilket får CPU-belastningen til at eksplodere.

Hvordan kan man se, om PHP-FPM er overbelastet?
kan bruge top 或 htop Kommando til at se CPU og hukommelsesforbrug:
top -c
Hvis du ser procesoplysninger, der ligner følgende, betyder det, at PHP-FPM kører under høj belastning:
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
Se, hvordan disse processer fylder mere end 70 % af CPU'en? Hvis dette sker ofte, vil din PHP-FPM Der må være et problem!
Så hvordan kan vi optimere PHP-FPM-konfigurationen, så serveren ikke længere er overbelastet?
PHP-FPM procespuljeoptimering (justering af kerneparameter)
Først, åben php-fpm Konfigurationsfiler:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Skift til din PHP-version, f.eks. PHP8.3, og ændr den til denne:
/etc/php/8.3/fpm/pool.d/www.conf
Forespørg PHP-versionen angivet af HestiaCP
v-list-web-domain user domain.com
For eksempel:
v-list-web-domain abc chenweiliang.com
I outputtet vil du se noget som:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Det betyder, at siden bruger PHP 8.3.
Lad os se på din PHP-FPM-konfiguration:
[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
Du kan se, at din pm Den brugte er ondemand,Selvom det kan reducere ressourceforbruget i inaktiv tid, når trafikken pludselig stiger, kan processen muligvis ikke reagere i tide., hvilket resulterer i en 500 fejl.
1. Juster PHP-FPM-procespuljeparametre
Hvis konfigurationen bruger dynamicDette er en metode til at forudstarte nogle arbejdsprocesser og dynamisk justere dem i henhold til anmodningsmængden, hvilket kan reagere hurtigere, når anmodningsmængden pludselig stiger.
For hjemmesider med en vis mængde trafik anbefales det at bruge pm = dynamicFordi den kan opretholde en vis mængde inaktive processer og undgå 500 fejl under høj samtidighed.
Det anbefales kun at bruge det, når adgangsvolumen er ekstremt lav, og hukommelsesressourcerne er knappe. pm = ondemand For at spare ressourcer.
Foreslog at ondemand, og optimer pm.max_children Og andre 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 后自动退出
Hvorfor vil du ændre det sådan?
pm = dynamic: Tildel processer mere fleksibelt for at undgå ventetid, der kan være forårsaget af ondemand;pm.max_children = 16: Undgå 500 fejl forårsaget af for få processer;pm.start_servers = 5: Undgå langsom processtart;pm.max_requests = 3000:Forebyggelse af hukommelseslækager, genbrug processen regelmæssigt.
2. Begræns udførelsestiden for PHP-scripts for at forhindre langsigtet belægning
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Dette kan forhindre noglePHP-scripts, der bruger for meget CPU, kan ødelægge din server.
Efter at have gemt, genstart PHP-processen:
sudo systemctl restart php8.3-fpmAktiver PHP-FPM-statusovervågning for at holde styr på fremskridtene til enhver tid
Aktiver PHP-FPM-procesovervågning og se den til enhver tidAktuelt antal aktive processer og anmodning om ventestatus, for at undgå overbelastning af serveren.
在 php-fpm.conf Tilføjet i:
pm.status_path = /status
Derefter, Nginx-konfiguration:
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;
}
På denne måde kan du http://yourdomain.com/status Se PHP-FPM i aktion!
Optimer PHP-FPM-logfiler for hurtigt at fejlfinde problemer
在 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 的脚本记录到日志
På denne måde, når der opstår en 500-fejl, kan du direkte se loggen:
tail -f /var/log/php-fpm/error.log
Se om PHP rapporterer en fejl, som f.eks out of memory,script execution timeout 等.
Genstart PHP-FPM regelmæssigt for at forhindre hukommelseslækager
kunne bestå cron Genstart PHP-FPM regelmæssigt for at forhindre langvarige processer i at forårsageHukommelseslækager.
crontab -e
Tilføj følgende planlagte opgave for automatisk at genstarte PHP-FPM kl. 3 hver dag:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Hvad hvis problemet fortsætter? Yderligere optimering!
Hvis du stadig følger ovenstående optimeringLejlighedsvis opstår der 500 fejl, kan du fortsætte med følgende optimeringer:
1. Aktiver OPcache for at forbedre PHP-udførelseseffektiviteten
Hvis OPcache ikke er aktiveret endnu, kan du installere det på denne måde (ved at bruge Ubuntu som eksempel):
sudo apt install php8.3-opcache -y
Rediger derefter php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Effekt? PHP side eksekveringshastighed er blevet væsentligt forbedret!
2. Nginx-konfigurationsoptimering
Sørg for, at Nginx-relaterede parametre er rimelige, som f.eks fastcgi_read_timeout Juster det passende for at undgå, at PHP-scripts bliver afsluttet af Nginx på grund af lang eksekveringstid:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Resumé: Optimer PHP-FPM, og hjemmesiden vil ikke længere gå ned!
Hvilke justeringer har vi foretaget efter denne optimering?
✅ Optimering af PHP-FPM-procespuljen,brug ondemandOg optimer pm.max_children parameter;
✅ Begrænsning af eksekveringstiden for PHP-scripts, for at forhindre langsigtet CPU-besættelse;
✅ Aktiver PHP-FPM-overvågning, se procesbelastningen i realtid;
✅ Optimering af PHP-FPM-logfiler, hurtigt fejlfinde 500 fejl;
✅ Genstart PHP-FPM regelmæssigt, forhindre hukommelseslækager;
✅ Aktiver OPcache, forbedre PHP-udførelseseffektiviteten;
✅ Optimering af Nginx-konfiguration, for at undgå problemer med timeout.
Efter denne optimering vil PHP-FPM-belastningen blive kraftigt reduceret, og hjemmesidens drift vil være mere stabil! 🔥
Prøv det nu! 💪🚀
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) delt "HestiaCP PHP-FPM belastning er for høj? Dynamisk webside 500 fejl? Denne optimering træder i kraft med det samme! ”, kan det være nyttigt for dig.
Velkommen til at dele linket til denne artikel:https://www.chenweiliang.com/cwl-32512.html
For at låse op for flere skjulte tricks🔑, velkommen til at blive en del af vores Telegram-kanal!
Del og like hvis du kan lide det! Dine delinger og likes er vores fortsatte motivation!