Este error ocurre cuando el servidor no tiene suficientes procesos php-fpm
para manejar las solicitudes, lo que puede causar problemas de rendimiento. A continuación, te explicamos cómo ajustar los parámetros de configuración para resolverlo.
[pool www] seems busy (you may need to increase pm.start_servers, or pm.min/max_spare_servers), spawning 8 children, there are 0 idle, and 6 total children
Descripción del Problema
El mensaje de error indica que el pool de procesos php-fpm
está sobrecargado y no tiene suficientes procesos disponibles para manejar las solicitudes entrantes. Esto requiere ajustar los valores de configuración en el archivo del pool correspondiente.
Pasos para Solucionar el Problema
1. Editar el Archivo de Configuración
Abre el archivo de configuración del pool www
con el siguiente comando:
vim /etc/php/8.2/fpm/pool.d/www.conf
2. Localizar los Parámetros de Configuración
Encuentra las siguientes líneas en el archivo de configuración:
pm.max_children = 100
; The number of child processes created on startup.
; Note: Used only when pm is set to 'dynamic'
; Default Value: (min_spare_servers + max_spare_servers) / 2
pm.start_servers = 16
; The desired minimum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.min_spare_servers = 8
; The desired maximum number of idle server processes.
; Note: Used only when pm is set to 'dynamic'
; Note: Mandatory when pm is set to 'dynamic'
pm.max_spare_servers = 24
3. Modificar los Valores
Ajusta los parámetros teniendo en cuenta la fórmula para pm.start_servers
y calcula un valor adecuado para pm.max_children
según la memoria RAM disponible en tu servidor.
Ajuste de pm.start_servers
La fórmula para este valor es:\text{pm.start_servers} = \frac{\text{pm.min_spare_servers} + \text{pm.max_spare_servers}}{2}
Ejemplo:
- Si
pm.min_spare_servers = 10
ypm.max_spare_servers = 30
: \text{pm.start_servers} = \frac{10 + 30}{2} = 20
Cálculo de pm.max_children
Este valor depende de los recursos disponibles del servidor:
- Determina la memoria disponible: Ejecuta:
free -m
Observa la columna available para identificar cuánta memoria queda libre paraphp-fpm
. - Calcula el consumo promedio por proceso php-fpm:
Ejecuta:ps --no-headers -o "rss,cmd" -C php-fpm | awk '{ sum += $1; n++ } END { if (n > 0) print sum / n / 1024; }'
Este comando devuelve el consumo promedio en MB por proceso php-fpm. - Calcula
pm.max_children
:
Usa la fórmula:
\text{pm.max_children} = \frac{\text{Memoria Disponible}}{\text{Uso por Proceso}}
Ejemplo:- Memoria disponible: 2048 MB.Uso promedio por proceso: 30 MB.
\text{pm.max_children} = \frac{2048}{30} \approx 68
En este caso, asignarías un valor de 68 parapm.max_children
.
Configuración Ajustada (Ejemplo)
Basado en el cálculo anterior, el archivo www.conf
podría quedar así:
pm.max_children = 68
pm.start_servers = 20
pm.min_spare_servers = 10
pm.max_spare_servers = 30
4. Guardar los Cambios y Salir
Guarda y cierra el archivo presionando:
Esc
para salir del modo de edición.- Escribe
:wq
y presionaEnter
.
Reiniciar php-fpm
Reinicia el servicio para aplicar los cambios:
systemctl restart php8.2-fpm
Verificar el Estado
Confirma que el servicio está funcionando correctamente:
systemctl status php8.2-fpm
También puedes monitorear los procesos de php-fpm ejecutando:
ps aux | grep php-fpm
Notas Importantes
- Cuidado con
pm.max_children
: Este valor depende de la RAM disponible y el consumo promedio por proceso. Ajustarlo demasiado alto puede causar problemas de memoria. - Pruebas Graduales: Si no estás seguro de los valores óptimos, comienza con valores conservadores y ajusta gradualmente según el rendimiento observado.
- Monitoreo: Usa herramientas como
htop
otop
para verificar el uso de recursos después de los cambios.
Con esta guía completa, deberías poder solucionar el error y optimizar el rendimiento de tu servidor php-fpm.