Conexões Simultâneas no Apache

Iniciado por carlosbenedito86, 19 de Setembro de 2021, 22:45

tópico anterior - próximo tópico

carlosbenedito86

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.

zekkerj

#1
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, 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.
Pesquise antes de perguntar, sua dúvida pode já ter sido respondida.
Não respondo dúvidas por MP, coloque sua dúvida no fórum onde ela pode ser pesquisada pelos seus colegas!
Não venha ao fórum apenas para perguntar. Se você sabe a resposta de um problema, porque não ajudar seu colega? ;D