Como chamar um URL de serviço do script de shell bash em paralelo?

8

Eu tenho um serviço que estou chamando de outro aplicativo. Abaixo está o meu URL de serviço que estou chamando -

http://www.betaservice.domain.host.com/web/hasChanged?ver=0

Eu preciso fazer algum teste de carga na minha URL de serviço acima na maneira multithread em vez de chamar sequencialmente um por um.

Existe alguma maneira de bash shell script, eu posso colocar uma carga na minha URL de serviço acima, chamando-o no modo multithread? Eu posso ter 60-70 threads chamando acima de URL em paralelo muito rápido, se possível?

    
por david 08.09.2014 / 23:21

3 respostas

12

Eu não chamaria isso de multithreading, mas você poderia simplesmente lançar 70 trabalhos em segundo plano:

for i in {1..70}; do 
   wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
done

Isso resultará em 70% dewget de processos sendo executados de uma só vez. Você também pode fazer algo mais sofisticado como este pequeno script:

#!/usr/bin/env bash

## The time (in minutes) the script will run for. Change 10
## to whatever you want.
end=$(date -d "10 minutes" +%s);

## Run until the desired time has passed.
while [ $(date +%s) -lt "$end" ]; do 
    ## Launch a new wget process if there are
    ## less than 70 running. This assumes there
    ## are no other active wget processes.
    if [ $(pgrep -c wget) -lt 70 ]; then
        wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0 2>/dev/null &
    fi
done
    
por 08.09.2014 / 23:26
8

Tente ab, você também tem uma boa estatística:

ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0

Esta chamada fará 10000 solicitações com simultaneidade de 70 consultas paralelas.

    
por 09.09.2014 / 00:36
5

Você poderia tentar instalar o GNU paralelo. Você pode obter alguns exemplos paralelos do GNU de aqui .

Teste

Eu instalei gnu-parallel da fonte na minha máquina e consegui que ela funcionasse.

Você poderia instalá-lo a partir da fonte de aqui . Eu tenho um sistema de redhat e então eu baixei o pacote fedora e então executei o .configure , make e make install para obter o parallel instalado no meu sistema.

Agora, após a instalação bem-sucedida, criei um diretório checking e executei o comando abaixo.

seq 10 | parallel -n0  wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0

Como esperado, o comando acima me fez baixar 10 cópias da página da web. Você pode definir o número desejado com seq .

Para mais informações sobre como executar o mesmo comando em paralelo, você pode verificar os exemplos fornecidos pelo gnu-parallel de aqui . Na página de exemplo,

If you want to run the same command with the same arguments 10 times in parallel you can do:

seq 10 | parallel -n0 my_command my_args

EDITAR

Agora, para aproveitar a execução de parallel , você pode usar o comando como

 seq 70 | parallel -j70 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0

A opção -j é algo que poderia especificar o total de trabalhos que podem ser executados em paralelo com base no total de núcleos da CPU.

    
por 08.09.2014 / 23:27