Tengo un producto SAAS creado en php junto con apache2 y mysql y está alojado en AWS. Mi producción es muy lenta en las horas pico y cuando reviso el estado del servidor dice que los trabajadores inactivos son 0 (cero). Estoy usando mpm-prefork.
Current Time: Monday, 24-Aug-2020 19:36:32 UTC
Restart Time: Friday, 14-Aug-2020 06:03:27 UTC
Parent Server Config. Generation: 12
Parent Server MPM Generation: 11
Server uptime: 10 days 13 hours 33 minutes 5 seconds
Server load: 1.17 1.07 0.95
Total accesses: 28851443 - Total Traffic: 824.8 GB
CPU Usage: u289.99 s50.68 cu0 cs0 - .0373% CPU load
31.6 requests/sec - 0.9 MB/second - 30.0 kB/request
256 requests currently being processed, 0 idle workers
El siguiente es mi archivo de configuración mpm-prefork.conf.
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 450
MaxConnectionsPerChild 0
</IfModule>
El comando TOP en ubuntu20.04 me da esto:
top - 20:03:58 up 143 days, 11:16, 1 user, load average: 0.48, 0.71, 0.83
Tasks: 369 total, 3 running, 317 sleeping, 0 stopped, 0 zombie
%Cpu(s): 15.9 us, 3.2 sy, 0.0 ni, 79.9 id, 0.0 wa, 0.0 hi, 1.0 si, 0.0 st
KiB Mem : 7865072 total, 1023492 free, 2752320 used, 4089260 buff/cache
KiB Swap: 0 total, 0 free, 0 used. 4755856 avail Mem
Según los detalles, puedo ver que 1 GB de RAM todavía está libre. Entonces, ¿por qué cero trabajadores inactivos? Además, ¿por qué no hay trabajadores inactivos en solo 256 solicitudes cuando configuro MaxRequestWorkers en 450? La RAM máxima en la máquina es 8 GB
Respuesta1
Con la horquilla previa MPM, si aumenta, MaxRequestWorkers
también deberá aumentar ServerLimit
.
Para servidores sin subprocesos (es decir, prefork), MaxRequestWorkers se traduce en la cantidad máxima de procesos secundarios que se iniciarán para atender solicitudes. El valor predeterminado es 256; para aumentarlo, también debes aumentar ServerLimit.
https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers
Respuesta2
Con mpm_prefork, el servidor web genera nuevos procesos para manejar las solicitudes. Cada proceso solo puede manejar una solicitud a la vez.
En su ejemplo, su servidor web está configurado para tener al menos 5 procesos de servidor inactivos esperando para manejar solicitudes y como máximo 10. Dado que está manejando más de 250 solicitudes simultáneas, es posible que su servidor web no pueda generar nuevos procesos rápidamente. suficiente.
Aumentaría los valores de StartServers, MinSpareServers y MaxSpareServers para garantizar que tenga suficiente capacidad disponible para picos de carga o cargas pesadas.
Es posible que también desee considerar cambiar a otro módulo de procesamiento múltiple según el tipo de carga de trabajo que necesite atender.
Editar: la respuesta de @tetech es la correcta; sin embargo, es posible que también desee considerar modificar estos valores, ya que esto podría mejorar el rendimiento del servidor web.