Eu tenho um produto SAAS construído em php junto com apache2 e mysql e foi hospedado na AWS. Minha produção é muito lenta em horários de pico e quando verifico o status do servidor, aparece que os trabalhadores ociosos são 0 (zero). Estou 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
a seguir está meu arquivo de configuração mpm-prefork.conf
<IfModule mpm_prefork_module>
StartServers 5
MinSpareServers 5
MaxSpareServers 10
MaxRequestWorkers 450
MaxConnectionsPerChild 0
</IfModule>
O comando TOP no ubuntu20.04 me dá isto:
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
De acordo com os detalhes, posso ver que 1 GB de RAM ainda está livre. então zero trabalhadores ociosos? Além disso, por que zero trabalhadores ociosos em apenas 256 solicitações quando defino MaxRequestWorkers como 450. A RAM máxima na máquina é de 8 GB
Responder1
Com o pré-garfo MPM, se você aumentar, MaxRequestWorkers
também precisará aumentar ServerLimit
.
Para servidores não threaded (ou seja, prefork), MaxRequestWorkers se traduz no número máximo de processos filhos que serão lançados para atender solicitações. O valor padrão é 256; para aumentá-lo, você também deve aumentar o ServerLimit.
https://httpd.apache.org/docs/2.4/mod/mpm_common.html#maxrequestworkers
Responder2
Com mpm_prefork, o servidor web gera novos processos para lidar com solicitações. Cada processo só é capaz de lidar com uma solicitação por vez.
No seu exemplo, seu servidor web está configurado para ter no mínimo 5 processos de servidor ociosos aguardando para lidar com solicitações e no máximo 10. Dado que você está lidando com mais de 250 solicitações simultâneas, pode ser que seu servidor web não consiga gerar novos processos rapidamente suficiente.
Eu aumentaria os valores StartServers, MinSpareServers e MaxSpareServers para garantir que você tenha bastante capacidade disponível para picos de carga ou cargas pesadas.
Você também pode considerar mudar para outro módulo de multiprocessamento, dependendo do tipo de carga de trabalho que precisa atender.
Editar: a resposta da @tetech é a correta, mas você também pode considerar ajustar esses valores, pois isso pode melhorar o desempenho do servidor web.