Directorio de artículos
¿Te ha pasado alguna vez? Tu sitio web se ralentiza de repente o incluso muestra un error 500. Reiniciar PHP-FPM lo soluciona , pero el problema vuelve a aparecer al cabo de un rato. ¡Es increíblemente frustrante!
¿Por qué ocurre esto? Generalmente, se debe a una configuración incorrecta del pool de procesos PHP-FPM o a recursos insuficientes del servidor . Hoy optimizaremos a fondo PHP-FPM en HestiaCP para garantizar la máxima estabilidad de su sitio web.
La razón principal por la que PHP-FPM está sobrecargado
PHP-FPM es el gestor de procesos de PHP , responsable de gestionar las solicitudes dinámicas. Una configuración inadecuada 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
¿Observas que estos procesos utilizan más del 70% de la CPU? Si esto ocurre con frecuencia, ¡ definitivamente hay algún problema con tu PHP-FPM!
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 indica que el sitio web utiliza PHP 8.5.
Echemos un vistazo a su configuración 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
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.
Las ventajas son evidentes: aislamiento seguro . Incluso si un sitio se ve comprometido, los demás permanecen intactos.
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 si www.conf falla, 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
Las principales diferencias son: identidad del usuario, dirección de escucha y 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 evita que ciertos scripts PHP que consumen una cantidad excesiva de CPU provoquen la caída del 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
Según la configuración de tu VPS ( 8 núcleos de CPU, 24 GB de RAM ), los recursos de tu servidor son más que suficientes. Para PHP-FPM, 24 GB de RAM te permiten configurar un número muy elevado de procesos concurrentes.
En un entorno de producción, normalmente asignamos suficiente memoria (entre 8 y 12 GB) para el propio sistema, las bases de datos Apache (como MySQL /MariaDB) y las cachés (como Redis / Memcached ), dejando los 12-16 GB restantes para que se asignen por completo a PHP-FPM.
Basándonos en un consumo medio de memoria de entre 40 MB y 60 MB por proceso PHP , 1 GB de memoria puede ejecutar aproximadamente entre 16 y 25 procesos.
A continuación, se muestra una configuración FPM de alto rendimiento y alta concurrencia, diseñada específicamente para usted , que puede mejorar considerablemente la capacidad de WordPress y evitar que se bloquee debido a picos repentinos de tráfico:
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
💡 ¿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.
Ver el registro de lentitud:
tail -f /var/log/php8.5-fpm.log.slowtail -f /var/log/php8.4-fpm.log.slow
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
Habilitar la monitorización de procesos de PHP-FPM permite visualizar el número de procesos activos y el estado de espera de las solicitudes en cualquier momento , evitando así 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 después de seguir las optimizaciones anteriores aún encuentra ocasionalmente un error 500 , puede 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! 💪🚀
Si aún deseas aprender más sobre cómo personalizar las plantillas PHP-FPM con HestiaCP, este artículo te brindará una comprensión más profunda:
👉 Plantilla personalizada PHP-FPM de HestiaCP: Secretos de optimización del rendimiento de PHP 8.5 ▼
En este contenido verás:
- Técnicas de optimización de alta concurrencia: Cómo mejorar la velocidad de respuesta mediante una configuración de procesos adecuada.
- Solución de aislamiento de seguridad: Evite los riesgos de acceso entre sitios y garantice la estabilidad de la cuenta.
- Registros y monitorización: Utilice los registros de uso lento para localizar cuellos de botella y optimizar continuamente el rendimiento del sitio web.
Esperamos que el artículo "HestiaCP PHP-FPM Overload? Dynamic Webpage 500 Error? This Optimization Method Will Show Immediate Results!" compartido en el blog de Chen Weiliang ( https://www.chenweiliang.com/ ) le sea útil.
No dudes en compartir el enlace de este artículo: https://www.chenweiliang.com/cwl-32512.html

