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.5, 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.5 Esto significa que el sitio web utiliza PHP 8.5.
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-fpmOptimizar PHP-FPM en función de la configuración del VPS.
Ejemplo de configuración de VPS:
- Descripción: VPS 3 NVMe
- Espacio en disco: 300 GB
- Núcleos de CPU: 8
- RAM: 24 GB
Dependiendo de la configuración de su VPS (CPU de 8 núcleos, 24 GB de RAMLos recursos de su servidor son más que suficientes. Para PHP-FPM, 24 GB de memoria le permiten configurar un número muy elevado de procesos concurrentes.
En un entorno de producción, normalmente proporcionamos el sistema en sí, la base de datos Apache (como por ejemplo...) MySQL/MariaDB) y caché (como Redis/MemcachedDeja suficiente memoria (digamos 8-12 GB), el resto... 12 GB-16 GB de RAMSe puede asignar completamente a PHP-FPM.
Basado en el uso promedio por proceso PHP 40 MB – 60 MB En cuanto al uso de memoria, 1 GB de memoria puede ejecutar aproximadamente entre 16 y 25 procesos.
Lo siguiente está hecho a tu medida.Configuración FPM de alta concurrencia y alto rendimientoPuede mejorar mucho WordPress Tiene capacidad para gestionar un tráfico intenso y puede evitar que los aumentos repentinos del tráfico provoquen fallos en el sistema.
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.4-fpm.log.slow
request_slowlog_timeout = 5s
💡 ¿Por qué esta configuración?
pm.max_children = 300Esta es una optimización fundamental. Tu configuración anterior de 50 procesos era demasiado conservadora para 24 GB de memoria. Ante picos repentinos de tráfico (o bots que saturaban el sistema en segundo plano), 50 procesos se sobrecargaban al instante, provocando tiempos de espera de conexión agotados. Aumentarlo a 300 puede mejorar considerablemente la capacidad de procesamiento concurrente de tu servidor.pm.start_servers/ `min_spare_serversGracias a sus 8 núcleos de CPU, puede mantener inicialmente y de forma habitual más procesos inactivos, lo que le permite aprovechar las ventajas de los múltiples núcleos para que se puedan abrir nuevas solicitudes al instante sin tener que esperar a que se creen los procesos.pm.max_requests = 1000Aumenta de 500 a 1000. Tu memoria es grande y los procesos no necesitan reiniciarse con frecuencia. Aumentar a 1000 puede reducir el consumo de CPU causado por la creación y destrucción constante de procesos.
Tras realizar los cambios, recuerde reiniciar el servicio PHP-FPM para que estos surtan efecto.
systemctl restart php8.5-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.5-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.5-opcache -y
Luego edita php.ini:
opcache.enable=1
opcache.memory_consumption=128
opcache.max_accelerated_files=4000
opcache.validate_timestamps=0
- opcache.validate_timestamps=0
- Desactivar la detección en tiempo realReduzca las operaciones de entrada/salida del sistema de archivos y mejore el rendimiento.
Sin embargo, esto significa que deberá borrar manualmente la caché (reiniciar el servicio PHP) después de modificar los archivos PHP.
Tras modificar la configuración, debe reiniciar el servicio PHP para que los cambios surtan efecto.
sudo systemctl restart php<版本>-fpm¿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
