Cómo Optimizar PHP-FPM para un Servidor, Error Seems Busy

Artículos Guías Manuales Sistemas Linux Windows Redes MySql Binario 0 Binario Cero

[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 11 total children

El mensaje indica que el pool de procesos de PHP-FPM está bajo carga, y los procesos no son suficientes para manejar las solicitudes actuales. Esto puede provocar demoras en las respuestas o errores en el servidor.

Análisis del mensaje:

  • pool www: Se refiere al pool configurado en tu archivo www.conf (o similar).
  • seems busy: El pool está ocupado y necesita más procesos.
  • spawning 8 children: PHP-FPM está intentando crear más procesos para manejar la carga.
  • 0 idle: No hay procesos inactivos disponibles para manejar nuevas solicitudes.
  • 11 total children: Hay 11 procesos de PHP-FPM activos.

Soluciones:

  1. Revisar y ajustar configuración de PHP-FPM: Edita el archivo de configuración del pool correspondiente (generalmente /etc/php/7.x/fpm/pool.d/www.conf).
    • Aumenta los valores relacionados con los procesos:

      pm = dynamic
      pm.max_children = 40
      pm.start_servers = 10
      pm.min_spare_servers = 5
      pm.max_spare_servers = 15
      • pm.max_children: El número máximo de procesos hijos que pueden crearse.
      • pm.start_servers: Número inicial de procesos al iniciar PHP-FPM.
      • pm.min_spare_servers: Número mínimo de procesos inactivos que se mantendrán.
      • pm.max_spare_servers: Número máximo de procesos inactivos.
  2. Monitoriza el rendimiento: Usa herramientas como top, htop o sar para verificar la carga de CPU y memoria. Con un servidor con 2 vCPU y 2 GB de RAM, asegúrate de que los valores no sobrecarguen los recursos.


    Estimación de memoria por proceso
    Un proceso PHP-FPM típico consume entre 20 MB y 50 MB de RAM, dependiendo de:
    La carga de trabajo.

    Extensiones PHP activas.
    Tamaño de las solicitudes.
    Para 40 procesos.

    Mínimo: 40×20 MB=800 MB
    Máximo: 40×50 MB=2000 MB

    Dado que el servidor estimado tiene 2 GB de RAM, usar 40 procesos será el límite superior, dejando poco espacio para otros procesos del sistema (como el servidor web o servicios de base de datos). Si no tienes un uso intensivo de otros servicios, esta configuración puede funcionar.
  3. Optimización de tu aplicación:
    • Revisa tu código PHP para identificar posibles cuellos de botella.
    • Implementa cache (e.g., Opcache, Memcached o Redis).
    • Reduce el tiempo de ejecución de los scripts para liberar procesos más rápido.
  4. Verifica el tráfico: Si el aumento de carga es temporal (por ejemplo, debido a picos de tráfico), considera usar un balanceador de carga o implementar estrategias de escalabilidad.
  5. Reinicia PHP-FPM: Una vez ajustados los parámetros, reinicia el servicio:

    sudo systemctl restart phpx.x-fpm

Nota:

Si el servidor sigue mostrando problemas, puede ser necesario considerar una actualización a un servidor con más recursos o usar servicios de escalado horizontal.