Directorio de artículos
¿Alguna vez te has encontrado en esta situación?El acceso al sitio web se ralentizó repentinamente o incluso generó un error 500. Después de reiniciar PHP-FPM, volvió a la normalidad.¿Pero el problema vuelve a aparecer después de un tiempo? ¡Esto es tan frustrante!
¿Por qué está pasando esto?De hecho, esto suele ser así.El grupo de procesos PHP-FPM no está configurado correctamente o los recursos del servidor son insuficientes.causado por. Hoy optimizaremos a fondo hestiacp ¡La instalación de PHP-FPM hace que el sitio web sea tan estable como una roca!
La razón principal por la que PHP-FPM está sobrecargado
PHP-FPM es unGerente de procesos, que es responsable de gestionar las solicitudes dinámicas. Si la configuración no es razonable, puede provocar:
- Los recursos del servidor están agotados, lo que provoca que PHP-FPM no pueda responder a nuevas solicitudes de manera oportuna;
- Muy pocos procesos, cuando el tráfico aumenta repentinamente, no se puede procesar a tiempo;
- El uso del proceso es demasiado alto, provocando que la carga de la CPU explote.

¿Cómo saber si PHP-FPM está sobrecargado?
puedo usar top 或 htop Comando para ver el uso de CPU y memoria:
top -c
Si ve información de proceso similar a la siguiente, significa que PHP-FPM se está ejecutando bajo alta carga:
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
¿Ves cómo estos procesos ocupan más del 70% de la CPU? Si esto sucede a menudo, su PHP-FPM Debe haber un problema!
Entonces, ¿cómo podemos optimizar la configuración de PHP-FPM para que el servidor ya no se sobrecargue?
Optimización del grupo de procesos PHP-FPM (ajuste de parámetros básicos)
Primero, abre php-fpm Archivo de configuración:
sudo nano /etc/php/*/fpm/pool.d/www.conf- *Cambie a su versión de PHP, como PHP8.3, y cámbiela a esto:
/etc/php/8.3/fpm/pool.d/www.conf
Consultar la versión de PHP establecida por HestiaCP
v-list-web-domain user domain.com
例如:
v-list-web-domain abc chenweiliang.com
En la salida verás algo como:
PHP SUPPORT yes
PHP MODE php-fpm
PHP VERSION 8.3
Esto significa que el sitio web utiliza PHP 8.3.
Echemos un vistazo a su configuración 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
Puedes ver que tu pm El usado es ondemand,Si bien puede reducir el uso de recursos durante el tiempo de inactividad, cuando el tráfico aumenta repentinamente, es posible que el proceso no pueda responder a tiempo., lo que da como resultado un error 500.
www.conf: El "conjunto de recursos universales" integrado del sistema.
Tras instalar PHP-FPM, el sistema le proporcionará automáticamente un... www.conf archivo.
suPosicionamientoEs muy sencillo: se trata simplemente de un grupo de procesos predeterminado que funciona de forma inmediata, normalmente adjunto a... www-data Descarga del usuario.
Este tipo de grupo es especialmente adecuado para entornos de un solo sitio: la configuración es sencilla y los parámetros son plantillas genéricas, como por ejemplo:
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm.max_children = 5
Si solo alojas un sitio web, puedes usarlo directamente y de forma fiable sin complicaciones adicionales.
etUfo.org.conf: Grupo personalizado
Una vez que gestionas varios sitios web, no puedes mantener a todos metidos en el mismo grupo.
En este punto, HestiaCP creará automáticamente un pool independiente para cada sitio, por ejemplo... etUfo.org.confEspecializados en nombres de dominio etufo.org 服务。
La forma habitual de jugar es:
- Cambiar usuarios y grupos:
user = etufo,group = etufo - Supervisión independiente:
listen = /run/php/etufo.sock - Ajustar el número de procesos garantiza una estabilidad sólida como una roca incluso con una alta concurrencia.
- Los archivos de registro separados facilitan la resolución de problemas.
Los beneficios son obvios:Aislamiento seguroAunque un sitio web se vea comprometido, los demás no se verán afectados.
dummy.conf: archivo ficticio
archivo de configuración ficticio Suelen ser ejemplos o plantillas proporcionadas por el sistema.
En realidad no funcionará a menos que lo modifiques y habilites manualmente.
Su importancia radica más bien en ser un "manual de operaciones", que te indica cómo escribir una nueva configuración de grupo.
¿Por qué dividir la piscina?
- 安全 性Utilice usuarios diferentes para sitios diferentes para evitar conflictos de permisos.
- El hombre que se enamoraEl número de procesos se puede ajustar individualmente para cada grupo, lo que permite realizar ajustes flexibles en función de la demanda de tráfico.
- AislamientoLos registros, los errores y las direcciones de escucha están separados, lo que facilita la resolución de problemas.
Por ejemplo: incluso www.conf Se derrumbó.etufo.org.conf Seguirá funcionando con normalidad y no provocará la caída de todo el servidor.
实际场景
- Servidor de sitio único: www.conf es suficiente.
- Servidor multisitioCada sitio tiene su propio archivo .conf independiente, como por ejemplo etufo.org.conf.
- archivo de configuración ficticioSolo como referencia, no recomendado.
Comparación de configuraciones
www.conf (grupo predeterminado)
[www]
user = www-data
group = www-data
listen = /run/php/php8.3-fpm.sock
pm = dynamic
pm.max_children = 5
etufo.org.conf (Grupo personalizado)
[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
La principal diferencia es:Identidad del usuario, dirección de escucha, número de procesos.
1. Ajuste los parámetros del grupo de procesos PHP-FPM
Si la configuración utiliza dynamicSe trata de un método para preiniciar algunos procesos de trabajo y ajustarlos dinámicamente según el volumen de solicitudes, lo que permite responder más rápido cuando el volumen de solicitudes aumenta repentinamente.
Para sitios web con una cierta cantidad de tráfico, se recomienda utilizar pm = dynamicPorque puede mantener una cierta cantidad de procesos inactivos y evitar errores 500 durante alta concurrencia.
Se recomienda usarlo solo cuando el volumen de acceso sea extremadamente bajo y los recursos de memoria sean limitados. pm = ondemand Para ahorrar recursos.
Se sugiere cambiar a dynamic, y optimizar pm.max_children Y otros parámetros:
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 后自动退出
¿Por qué quieres cambiarlo así?
pm = dynamic:Asignar procesos de forma más flexible para evitar esperas de solicitudes que pueden ser causadas por el ondemand;pm.max_children = 16:Evitar errores 500 causados por muy pocos procesos;pm.start_servers = 5:Evitar el inicio lento del proceso;pm.max_requests = 3000:Cómo prevenir fugas de memoria, reciclar el proceso periódicamente.
2. Limite el tiempo de ejecución de los scripts PHP para evitar la ocupación a largo plazo
request_terminate_timeout = 30s ; 超过 30s 的 PHP 脚本自动终止
php_admin_value[memory_limit] = 128M ; 限制 PHP 进程最大内存占用
Esto puede prevenir algunosLos scripts PHP que utilizan demasiada CPU pueden hacer caer su servidor.
Después de guardar, reinicie el proceso PHP:
sudo systemctl restart php8.3-fpmHabilite la supervisión del estado de PHP-FPM para realizar un seguimiento del progreso en cualquier momento
Habilite la supervisión del proceso PHP-FPM y visualícela en cualquier momentoNúmero actual de procesos activos y estado de espera de solicitudes, para evitar la sobrecarga del servidor.
在 php-fpm.conf Agregado en:
pm.status_path = /status
Luego, configuración 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;
}
De esta manera, puedes http://yourdomain.com/status ¡Vea PHP-FPM en acción!
Optimice los registros de PHP-FPM para solucionar problemas rápidamente
在 php-fpm.conf Nombre:
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 的脚本记录到日志
De esta manera, cada vez que se produzca un error 500, podrás ver directamente el registro:
tail -f /var/log/php-fpm/error.log
Vea si PHP informa un error, como por ejemplo out of memory,script execution timeout Espera
Reinicie PHP-FPM periódicamente para evitar pérdidas de memoria
capaz de pasar cron Reinicie PHP-FPM periódicamente para evitar que los procesos de larga duración provoquenFugas de memoria.
crontab -e
Agregue la siguiente tarea programada para reiniciar automáticamente PHP-FPM a las 3 a. m. todos los días:
0 3 * * * /usr/sbin/service php8.3-fpm restart
¿Qué pasa si el problema persiste? ¡Más optimización!
Si aún sigue la optimización anteriorOcasionalmente ocurren errores 500, puedes continuar con las siguientes optimizaciones:
1. Habilite OPcache para mejorar la eficiencia de ejecución de PHP
Si OPcache aún no está habilitado, puedes instalarlo de esta manera (usando Ubuntu como ejemplo):
sudo apt install php8.3-opcache -y
Luego edita php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=1
¿Efecto? ¡La velocidad de ejecución de páginas PHP se ha mejorado enormemente!
2. Optimización de la configuración de Nginx
Asegúrese de que los parámetros relacionados con Nginx sean razonables, como fastcgi_read_timeout Ajústelo adecuadamente para evitar que Nginx finalice los scripts PHP debido al largo tiempo de ejecución:
fastcgi_read_timeout 60s;
client_max_body_size 100M;
Resumen: ¡Optimice PHP-FPM y el sitio web ya no se bloqueará!
¿Qué ajustes hemos realizado después de esta optimización?
✅ Optimización del grupo de procesos PHP-FPM,usar ondemandY optimizar pm.max_children parámetro;
✅ Limitar el tiempo de ejecución de scripts PHP, para evitar la ocupación de la CPU a largo plazo;
✅ Habilitar la monitorización de PHP-FPM, visualizar la carga del proceso en tiempo real;
✅ Optimización de registros PHP-FPM, solucione rápidamente errores 500;
✅ Reinicie PHP-FPM periódicamente, evitar fugas de memoria;
✅ Habilitar OPcache, mejorar la eficiencia de ejecución de PHP;
✅ Optimización de la configuración de Nginx, para evitar problemas de tiempo de espera.
¡Después de esta optimización, la carga de PHP-FPM se reducirá enormemente y el funcionamiento del sitio web será más estable! 🔥
¡Pruébalo ahora! 💪🚀
Esperanza Chen Weiliang Blog ( https://www.chenweiliang.com/ ) compartió "¿La carga PHP-FPM de HestiaCP es demasiado alta? ¿Error 500 en página web dinámica? ¡Esta optimización tendrá efecto inmediatamente! ”, puede que te sea de utilidad.
Bienvenido a compartir el enlace de este artículo:https://www.chenweiliang.com/cwl-32512.html
