Fórum Ubuntu Linux - PT
Suporte Técnico => Servidores => Tópico iniciado 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.
-
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.