Fórum Ubuntu Linux - PT

Suporte Técnico => Servidores => Tópico iniciado por: carlosbenedito86 em 19 de Setembro de 2021, 22:45

Título: Conexões Simultâneas no Apache
Enviado por: carlosbenedito86 em 19 de Setembro de 2021, 22:45
Olá pessoal,
Preciso executar uma rotina pelo crontabs a cada minuto que executa uma URL 60 vezes via CURL. Fiz o seguinte comando:

* * * * * for i in `seq 0 59`; do curl -s https://url.php; done

Essa linha executa 60 registros sem problemas. Porém preciso fazer isso 30 vezes então copiei esta linha 30 vezes no crontab. Que executa um total de 1800 registros a cada minuto. :)

Porém fiz isso para testar a arquitetura de disparos, quando eu substituo pelo meu script real (que leva alguns segundos para ser processado), a quantidade cai de 1800 registros para 500 por minuto.

Como elevou em segundos o meu processamento de cada script, gera uma fila de processamento. O que antes ele conseguia concluir o processamento com 30 scripts por minuto, agora executa com 8.

Como eu aumento a quantidade de requisições simultâneas? Segue abaixo o meu apache2.conf:

<IfModule mpm_prefork_module>
StartServers 8
MinSpareServers 5
MaxSpareServers 20
ServerLimit 256
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>

<IfModule mpm_worker_module>
StartServers 2
MinSpareThreads 25
MaxSpareThreads 75
ThreadLimit 64
ThreadsPerChild 25
MaxClients 200
MaxRequestsPerChild 4000
</IfModule>

Estou tentando rodar em uma VPS de 32 GB de memória 8 vCPUs, Linux Ubuntu.

Obs: Já tentei alterar os parâmetros de MaxClients e ServerLimit para 950, reiniciei o apache e mesmo assim somente consigo executar 8 scripts concorrentes.
Título: Re:Conexões Simultâneas no Apache
Enviado por: zekkerj em 01 de Outubro de 2021, 17:10
Seu script é PHP, certo? Tente ver nos parâmetros do próprio (arquivo php.ini em algum lugar dentro de /etc) , a limitação deve estar ocorrendo lá.

EDIT: Ignore a recomendação acima. Consultando a documentação (https://httpd.apache.org/docs/2.4/mod/mpm_common.html), há dois parâmetros que controlam a quantidade de processos: MaxRequestWorkers e ServerLimit. Segundo a documentação, esses parâmetros (ambos com o valor de 256, por padrão) definem a quantidade máxima de processos simultâneos.

Como o valor dos seus outros parâmetros não bate com os padrões do módulo, é possível que esses dois também tenham sido reduzidos, com o intuito de reduzir o consumo de memória.

Ao modificar MaxRequestWorkers e ServerLimit, certifique-se de que o primeiro nunca seja maior do que o segundo, e que os valores escolhidos sejam tais que não provoquem carga excessiva sobre seu servidor --- leia-se, swap de memória e/ou trashing de processos.