Director articol
- 1 Motivul principal pentru care PHP-FPM este supraîncărcat
- 2 Optimizarea pool-ului de procese PHP-FPM (ajustarea parametrilor de bază)
- 3 Activați monitorizarea stării PHP-FPM pentru a urmări progresul în orice moment
- 4 Optimizați jurnalele PHP-FPM pentru a depana rapid problemele
- 5 Reporniți PHP-FPM în mod regulat pentru a preveni scurgerile de memorie
- 6 Ce se întâmplă dacă problema persistă? Optimizare in continuare!
- 7 Rezumat: Optimizați PHP-FPM și site-ul web nu se va mai bloca!
Te-ai confruntat vreodată cu această situație?Accesul la site a încetinit brusc sau chiar a dus la o eroare 500 După repornirea PHP-FPM, a revenit la normal., dar problema reapare după un timp? Este atât de frustrant!
De ce se întâmplă asta?De fapt, asta este de obiceiPool-ul de procese PHP-FPM nu este configurat corect sau resursele serverului sunt insuficiente.cauzat de. Astăzi, vom optimiza temeinic HestiaCP PHP-FPM sub capotă face site-ul la fel de stabil ca o piatră!
Motivul principal pentru care PHP-FPM este supraîncărcat
PHP-FPM este unManager de proces, care este responsabil pentru gestionarea cererilor dinamice. Dacă configurația nu este rezonabilă, poate duce la:
- Resursele serverului sunt epuizate, ceea ce face ca PHP-FPM să nu poată răspunde la noile solicitări în timp util;
- Prea puține procese, când traficul crește brusc, acesta nu poate fi procesat la timp;
- Utilizarea procesului este prea mare, provocând explozia încărcării procesorului.

Cum să vă dați seama dacă PHP-FPM este supraîncărcat?
poate utiliza top 或 htop Comandă pentru a vedea utilizarea CPU și a memoriei:
top -c
Dacă vedeți informații despre proces similare cu următoarele, înseamnă că PHP-FPM rulează sub sarcină mare:
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
Vedeți cum aceste procese ocupă peste 70% din CPU? Dacă acest lucru se întâmplă des, PHP-FPM Trebuie să fie o problemă!
Deci, cum putem optimiza configurația PHP-FPM astfel încât serverul să nu mai fie supraîncărcat?
Optimizarea pool-ului de procese PHP-FPM (ajustarea parametrilor de bază)
Mai întâi, deschideți php-fpm Fișiere de configurare:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Schimbați la versiunea PHP, cum ar fi PHP8.3, și modificați-o la aceasta:
/etc/php/8.3/fpm/pool.d/www.conf
Interogarea versiunii PHP setate de HestiaCP
v-list-web-domain user domain.com
De exemplu:
v-list-web-domain abc chenweiliang.com
În rezultat, veți vedea ceva de genul:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Aceasta înseamnă că site-ul folosește PHP 8.3.
Să aruncăm o privire la configurația ta 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
Puteți vedea că dvs pm Cel folosit este ondemand,Deși poate reduce utilizarea resurselor în timpul inactiv, atunci când traficul crește brusc, este posibil ca procesul să nu poată răspunde la timp., rezultând o eroare 500.
1. Ajustați parametrii pool-ului de procese PHP-FPM
Dacă configurația folosește dynamicAceasta este o metodă de pre-pornire a unor procese de lucru și de ajustare dinamică a acestora în funcție de volumul solicitărilor, putând răspunde mai rapid atunci când volumul solicitărilor crește brusc.
Pentru site-urile web cu un anumit volum de trafic, se recomandă utilizarea pm = dynamicDeoarece poate menține un anumit număr de procese inactive și poate evita 500 de erori în timpul concurenței ridicate.
Se recomandă utilizarea sa doar atunci când volumul de acces este extrem de mic și resursele de memorie sunt limitate. pm = ondemand Pentru a economisi resurse.
Se sugerează schimbarea în ondemand, și optimizați pm.max_children Și alți parametri:
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 后自动退出
De ce vrei să-l schimbi așa?
pm = dynamic: Alocați procesele mai flexibil pentru a evita așteptarea cererii care poate fi cauzată de cerere;pm.max_children = 16: Preveniți 500 de erori cauzate de prea puține procese;pm.start_servers = 5: Evitați pornirea lentă a procesului;pm.max_requests = 3000:Prevenirea scurgerilor de memorie, reciclați procesul în mod regulat.
2. Limitați timpul de execuție a scripturilor PHP pentru a preveni ocuparea pe termen lung
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Acest lucru poate preveni uniiScripturile PHP care folosesc prea mult CPU vă pot distruge serverul.
După salvare, reporniți procesul PHP:
sudo systemctl restart php8.3-fpmActivați monitorizarea stării PHP-FPM pentru a urmări progresul în orice moment
Activați monitorizarea procesului PHP-FPM și vizualizați-l în orice momentNumărul actual de procese active și starea de așteptare a cererii, pentru a evita supraîncărcarea serverului.
în php-fpm.conf Adăugat în:
pm.status_path = /status
Apoi, configurația 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;
}
În acest fel, poți http://yourdomain.com/status Vezi PHP-FPM în acțiune!
Optimizați jurnalele PHP-FPM pentru a depana rapid problemele
în php-fpm.conf Plus:
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 的脚本记录到日志
În acest fel, ori de câte ori apare o eroare 500, puteți vizualiza direct jurnalul:
tail -f /var/log/php-fpm/error.log
Vedeți dacă PHP raportează o eroare, cum ar fi out of memory,script execution timeout 等.
Reporniți PHP-FPM în mod regulat pentru a preveni scurgerile de memorie
capabil să treacă cron Reporniți PHP-FPM în mod regulat pentru a preveni cauzarea proceselor de lungă duratăScurgeri de memorie.
crontab -e
Adăugați următoarea sarcină programată pentru a reporni automat PHP-FPM la ora 3:XNUMX în fiecare zi:
0 3 * * * /usr/sbin/service php8.3-fpm restart
Ce se întâmplă dacă problema persistă? Optimizare in continuare!
Dacă tot urmați optimizarea de mai susOcazional apar 500 de erori, puteți continua cu următoarele optimizări:
1. Activați OPcache pentru a îmbunătăți eficiența execuției PHP
Dacă OPcache nu este încă activat, îl puteți instala astfel (folosind Ubuntu ca exemplu):
sudo apt install php8.3-opcache -y
Apoi editați php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
Efect? Viteza de execuție a paginii PHP a fost mult îmbunătățită!
2. Optimizarea configurației Nginx
Asigurați-vă că parametrii legați de Nginx sunt rezonabili, cum ar fi fastcgi_read_timeout Ajustați-l corespunzător pentru a evita terminarea scripturilor PHP de către Nginx din cauza timpului lung de execuție:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Rezumat: Optimizați PHP-FPM și site-ul web nu se va mai bloca!
Ce ajustări am făcut după această optimizare?
✅ Optimizarea pool-ului de procese PHP-FPM,utilizare ondemandȘi optimizați pm.max_children parametru;
✅ Limitarea timpului de execuție a scripturilor PHP, pentru a preveni ocuparea CPU pe termen lung;
✅ Activați monitorizarea PHP-FPM, vizualizați încărcarea procesului în timp real;
✅ Optimizarea jurnalelor PHP-FPM, depanați rapid 500 de erori;
✅ Reporniți PHP-FPM în mod regulat, previne scurgerile de memorie;
✅ Activați OPcache, îmbunătățirea eficienței execuției PHP;
✅ Optimizarea configurației Nginx, pentru a evita problemele de timeout.
După această optimizare, încărcarea PHP-FPM va fi mult redusă și funcționarea site-ului va fi mai stabilă! 🔥
Du-te și încearcă acum! 💪🚀
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) a distribuit „Încărcarea HestiaCP PHP-FPM este prea mare? Eroare dinamică pagina web 500? Această optimizare va intra în vigoare imediat! ”, vă poate fi de ajutor.
Bine ați venit să distribuiți linkul acestui articol:https://www.chenweiliang.com/cwl-32512.html
Pentru a debloca mai multe trucuri ascunse🔑, te invităm să te alături canalului nostru de Telegram!
Distribuie si da like daca iti place! Share-urile și like-urile tale sunt motivația noastră continuă!