Guía Completa para Solucionar el Error de php-fpm: [pool www] seems busy

Artículos Guías Manuales Sistemas Linux Windows Binario 0

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 y pm.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:

  1. Determina la memoria disponible: Ejecuta:

    free -m

    Observa la columna available para identificar cuánta memoria queda libre para php-fpm.
  2. 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.
  3. 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 para pm.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:

  1. Esc para salir del modo de edición.
  2. Escribe :wq y presiona Enter.

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

  1. 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.
  2. Pruebas Graduales: Si no estás seguro de los valores óptimos, comienza con valores conservadores y ajusta gradualmente según el rendimiento observado.
  3. Monitoreo: Usa herramientas como htop o top 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.