Directori d'articles
T'has trobat mai amb aquesta situació? El teu lloc web s'alenteix de sobte o fins i tot mostra un error 500. En reiniciar PHP-FPM, el restableix a la normalitat , però el problema torna a aparèixer al cap d'una estona? És increïblement frustrant!
Per què passa això? En realitat, això sol ser causat per una configuració incorrecta del grup de processos PHP-FPM o per recursos del servidor insuficients . Avui, optimitzarem a fons PHP-FPM sota HestiaCP per garantir l'estabilitat sòlida del vostre lloc web!
La raó principal per la qual PHP-FPM està sobrecarregat
PHP-FPM és el gestor de processos de PHP , responsable de gestionar les sol·licituds dinàmiques. Una configuració inadequada pot comportar:
- Els recursos del servidor s'han esgotat, fent que PHP-FPM no pugui respondre a les noves sol·licituds de manera oportuna;
- Massa pocs processos, quan el trànsit augmenta sobtadament, no es pot processar a temps;
- L'ús del procés és massa elevat, fent que la càrrega de la CPU exploti.

Com saber si PHP-FPM està sobrecarregat?
pot utilitzar top 或 htop Ordre per veure l'ús de la CPU i la memòria:
top -c
Si veieu informació de procés similar a la següent, vol dir que PHP-FPM s'està executant amb una càrrega elevada:
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
Veus que aquests processos utilitzen més del 70% de la CPU? Si això passa amb freqüència, definitivament hi ha alguna cosa malament amb el teu PHP-FPM!
Aleshores, com podem optimitzar la configuració PHP-FPM perquè el servidor ja no estigui sobrecarregat?
Optimització del conjunt de processos PHP-FPM (ajust de paràmetres bàsics)
Primer, obre php-fpm Fitxers de configuració:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Canvia a la teva versió de PHP, com ara PHP8.5, i canvia-la a això:
/etc/php/8.3/fpm/pool.d/www.conf
Consulta la versió de PHP establerta per HestiaCP
v-list-web-domain user domain.com
Per exemple:
v-list-web-domain abc chenweiliang.com
A la sortida, veureu alguna cosa com:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.5 Això indica que el lloc web utilitza PHP 8.5.
Fem una ullada a la configuració de 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
Podeu veure que el vostre pm El que s'utilitza és ondemand,Tot i que pot reduir l'ús de recursos durant el temps d'inactivitat, quan el trànsit augmenta de sobte, és possible que el procés no pugui respondre a temps., donant lloc a un error 500.
www.conf: El "reserva universal de recursos" integrat del sistema
Després d'instal·lar PHP-FPM, el sistema us proporcionarà automàticament un... www.conf document.
la sevaPosicionamentÉs molt senzill: només és un grup de processos per defecte que funciona de manera inmediata, normalment connectat a... www-data Descàrrega de l'usuari.
Aquest tipus de grup és especialment adequat per a entorns de lloc únic: la configuració és lleugera i els paràmetres són plantilles genèriques, com ara:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Si només allotgeu un lloc web, el podeu utilitzar directament i de manera fiable sense cap problema addicional.
etOVNI.org.conf: Agrupació personalitzada
Un cop executeu diversos llocs web, no podeu mantenir tothom amuntegat al mateix grup.
En aquest punt, HestiaCP crearà automàticament un grup separat per a cada lloc, per exemple... etOVNI.org.confEspecialitzat en noms de domini etufo.org 服务。
La manera habitual de jugar és:
- Canviar usuaris i grups:
user = etufo,group = etufo - Monitorització independent:
listen = /run/php/etufo.sock - Ajustar el nombre de processos garanteix una estabilitat sòlida fins i tot en condicions de concurrència elevada.
- Els fitxers de registre separats faciliten la resolució de problemes.
Els beneficis són evidents: aïllament segur . Fins i tot si un lloc està compromès, els altres no es veuen afectats.
dummy.conf: fitxer de simulació
dummy.conf Normalment són exemples o plantilles proporcionades pel sistema.
En realitat, no s'executarà tret que el modifiqueu i l'activeu manualment.
La seva importància és més aviat com un "manual d'operacions", que us explica com escriure una nova configuració de piscina.
Per què dividir la piscina?
- 安全 性Utilitzeu usuaris diferents per a llocs diferents per evitar conflictes de permisos.
- 性能优化El nombre de processos es pot ajustar individualment per a cada grup, cosa que permet ajustos flexibles en funció de la demanda de trànsit.
- AïllamentEls registres, els errors i les adreces d'escolta estan separats, cosa que facilita la resolució de problemes.
Per exemple, fins i tot si www.conf falla, etufo.org.conf encara funcionarà normalment i no farà que tot el servidor no caigui.
实际场景
- Servidor d'un sol lloc: www.conf és suficient.
- Servidor multisiteCada lloc té el seu propi fitxer .conf independent, com ara etufo.org.conf.
- dummy.confNomés com a referència, no recomanat.
Comparació de configuració
www.conf (agrupació per defecte)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Agrupació personalitzada)
[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
Les principals diferències són: la identitat de l'usuari, l'adreça d'escolta i el nombre de processos.
1. Ajusteu els paràmetres del grup de processos PHP-FPM
Si la configuració utilitza dynamicAquest és un mètode per iniciar prèviament alguns processos de treball i ajustar-los dinàmicament segons el volum de sol·licituds, cosa que pot respondre més ràpidament quan el volum de sol·licituds augmenta sobtadament.
Per a llocs web amb una certa quantitat de trànsit, es recomana utilitzar pm = dynamicPerquè pot mantenir una certa quantitat de processos inactius i evitar 500 errors durant una alta concurrència.
Es recomana utilitzar-lo només quan el volum d'accés sigui extremadament baix i els recursos de memòria siguin limitats. pm = ondemand Per estalviar recursos.
Suggerit a dynamic, i optimitzar pm.max_children I altres paràmetres:
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 后自动退出
Per què ho vols canviar així?
pm = dynamic: assigneu els processos de manera més flexible per evitar l'espera de sol·licituds que pot ser causada per la demanda;pm.max_children = 16: Evitar 500 errors causats per massa pocs processos;pm.start_servers = 5: Eviteu l'inici del procés lent;pm.max_requests = 3000:Prevenció de fuites de memòria, recicla el procés amb regularitat.
2. Limiteu el temps d'execució dels scripts PHP per evitar l'ocupació a llarg termini
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Això evita que certs scripts PHP que consumeixen massa CPU facin fallar el servidor.
Després de desar, reinicieu el procés PHP:
sudo systemctl restart php8.3-fpmOptimitzar PHP-FPM basat en la configuració de VPS
Exemple de configuració de VPS:
- Descripció: VPS 3 NVMe
- Espai en disc: 300 GB
- Nuclis de CPU: 8
- RAM: 24 GB
Segons la configuració del vostre VPS ( 8 nuclis de CPU, 24 GB de RAM ), els recursos del vostre servidor són més que suficients. Per a PHP-FPM, 24 GB de RAM us permeten configurar un nombre molt elevat de processos simultanis.
En un entorn de producció, normalment assignem prou memòria (per exemple, de 8 GB a 12 GB) per al sistema en si, les bases de dades Apache (com ara MySQL /MariaDB) i les memòries cau (com ara Redis / Memcached ), deixant que els 12 GB a 16 GB de memòria restants s'assignin completament a PHP-FPM.
Basant-nos en un ús mitjà de memòria de 40 MB-60 MB per procés PHP , 1 GB de memòria pot executar aproximadament entre 16 i 25 processos.
La següent és una configuració FPM d'alta concurrència i alt rendiment feta a mida per a vosaltres , que pot millorar considerablement la capacitat de WordPress i evitar que es bloquegi a causa d'augments sobtats de trànsit:
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
💡 Per què aquesta configuració?
pm.max_children = 300Aquesta és una optimització bàsica. La configuració anterior de 50 processos era massa conservadora per a 24 GB de memòria. En trobar-se amb augments sobtats de trànsit (o bots que inunden el fons), 50 processos es veuen desbordats instantàniament, provocant temps d'espera de connexió. Augmentar-la a 300 pot millorar diverses vegades la capacitat de processament de concurrència del servidor.pm.start_servers/ `mini_spare_serversCom que teniu 8 nuclis de CPU, inicialment i normalment podeu conservar més processos inactius, cosa que us permet aprofitar l'avantatge de diversos nuclis perquè les noves sol·licituds es puguin obrir a l'instant sense esperar la creació del procés.pm.max_requests = 1000Augmenta de 500 a 1000. La memòria és gran i no cal reiniciar els processos amb freqüència. Augmentar a 1000 pot reduir el consum de CPU causat per la destrucció i creació freqüent de processos.
Veure el registre de lentitud:
tail -f /var/log/php8.5-fpm.log.slowtail -f /var/log/php8.4-fpm.log.slow
Després de fer els canvis, recordeu de reiniciar el servei PHP-FPM perquè els canvis tinguin efecte.
systemctl restart php8.5-fpmActiveu el seguiment de l'estat de PHP-FPM per fer un seguiment del progrés en qualsevol moment
L'activació de la monitorització de processos PHP-FPM permet veure el nombre de processos actius i l'estat d'espera de les sol·licituds en qualsevol moment , evitant la sobrecàrrega del servidor.
在 php-fpm.conf Afegit a:
pm.status_path = /status
A continuació, la configuració de 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;
}
D'aquesta manera, pots http://yourdomain.com/status Fes una ullada a PHP-FPM en acció!
Optimitzeu els registres PHP-FPM per resoldre problemes ràpidament
在 php-fpm.conf Afegeix a:
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 的脚本记录到日志
D'aquesta manera, sempre que es produeixi un error 500, podeu veure directament el registre:
tail -f /var/log/php-fpm/error.log
Vegeu si PHP informa d'un error, com ara out of memory,script execution timeout Espera.
Reinicieu PHP-FPM regularment per evitar fuites de memòria
capaç de passar cron Reinicieu PHP-FPM periòdicament per evitar que els processos d'execució llarga causinFugades de memòria.
crontab -e
Afegiu la següent tasca programada per reiniciar automàticament PHP-FPM a les 3 del matí cada dia:
0 3 * * * /usr/sbin/service php8.5-fpm restart
Què passa si el problema persisteix? Més optimització!
Si encara trobeu ocasionalment un error 500 després de seguir les optimitzacions anteriors , podeu continuar amb les optimitzacions següents:
1. Habiliteu OPcache per millorar l'eficiència de l'execució de PHP
Si OPcache encara no està habilitat, podeu instal·lar-lo així (utilitzant Ubuntu com a exemple):
sudo apt install php8.5-opcache -y
A continuació, editeu php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
- opcache.validate_timestamps=0
- Desactiva la detecció en temps realReduir les E/S del sistema de fitxers i millorar el rendiment.
Tanmateix, això significa que heu d'esborrar manualment la memòria cau (reiniciar el servei PHP) després de modificar els fitxers PHP.
Després de modificar la configuració, cal reiniciar el servei PHP perquè els canvis tinguin efecte.
sudo systemctl restart php<版本>-fpmEfecte? La velocitat d'execució de la pàgina PHP s'ha millorat molt!
2. Optimització de la configuració de Nginx
Assegureu-vos que els paràmetres relacionats amb Nginx siguin raonables, com ara fastcgi_read_timeout Ajusteu-lo adequadament per evitar que Nginx finalitzi els scripts PHP a causa del llarg temps d'execució:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Resum: optimitzeu PHP-FPM i el lloc web ja no es bloquejarà!
Quins ajustos hem fet després d'aquesta optimització?
✅ Optimització del conjunt de processos PHP-FPM, utilitzar ondemandI optimitzar pm.max_children paràmetre;
✅ Limitació del temps d'execució dels scripts PHP, per evitar l'ocupació a llarg termini de la CPU;
✅ Activa la supervisió PHP-FPM, veure la càrrega del procés en temps real;
✅ Optimització de registres PHP-FPM, solucioneu ràpidament 500 errors;
✅ Reinicieu PHP-FPM regularment, evitar fuites de memòria;
✅ Activa OPcache, millorar l'eficiència de l'execució de PHP;
✅ Optimització de la configuració de Nginx, per evitar problemes de temps d'espera.
Després d'aquesta optimització, la càrrega PHP-FPM es reduirà molt i el funcionament del lloc web serà més estable! 🔥
Aneu a provar-ho ara! 💪🚀
Si encara esteu desitjosos d'aprendre més sobre la personalització de plantilles PHP-FPM amb HestiaCP, aquest article us proporcionarà una comprensió més profunda:
👉 Plantilla PHP-FPM personalitzada de HestiaCP: Secrets d'optimització del rendiment de PHP 8.5 ▼
En aquest contingut, veureu:
- Tècniques d'optimització d'alta concurrència: com millorar la velocitat de resposta mitjançant una configuració raonable del procés.
- Solució d'aïllament de seguretat: eviteu els riscos d'accés entre llocs i garantiu l'estabilitat del compte.
- Registres i monitorització: utilitzeu registres lents per localitzar els colls d'ampolla i optimitzar contínuament el rendiment del lloc web.
Esperem que l' article "Sobrecàrrega de HestiaCP PHP-FPM? Error de pàgina web dinàmica 500? Aquest mètode d'optimització mostrarà resultats immediats!" compartit al blog de Chen Weiliang ( https://www.chenweiliang.com/ ) us sigui útil.
No dubteu a compartir l'enllaç d'aquest article: https://www.chenweiliang.com/cwl-32512.html

