web-dev-qa-db-fra.com

Comment appeler une URL de service de Bash Shell Script en parallèle?

J'ai un service que j'appelle d'une autre application. Ci-dessous est mon URL de service que j'appelle -

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

Je dois faire un test de charge sur mon URL de service ci-dessus à la manière multithraled au lieu d'appeler séquentiellement une par une.

Y a-t-il une façon de Bash Shell Script, je peux mettre une charge sur mon URL de service ci-dessus en l'appelant à la manière multithreadée? Je peux avoir 60-70 threads appelant au-dessus de l'URL en parallèle très rapide si possible?

8
david

Je n'appellerais pas cela multithreading en tant que tel, mais vous pourriez simplement lancer 70 emplois en arrière-plan:

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

Cela entraînera 70 wget processus fonctionnant à la fois. Vous pouvez également faire quelque chose de plus sophistiqué comme ce petit 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
13
terdon

Essayez ab, vous obtenez une belle statistique aussi:

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

Cet appel fera 10000 demandes avec une concurrence de 70 requêtes parallèles.

9
jim

Vous pouvez essayer d'installer GNU parallel. Vous pouvez obtenir quelques-uns GNU exemples parallèles à partir de ici .

Test

J'ai installé gnu-parallel de la source dans ma machine et je pourrais le faire fonctionner.

Vous pouvez l'installer à partir de la source de ici . J'ai un système redhat et j'ai donc téléchargé le paquet Fedora, puis a dirigé le .configure, make et make install Pour obtenir le parallel installé dans mon système.

Maintenant, après l'installation réussie, j'ai créé un répertoire checking et dirigé la commande ci-dessous.

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

Comme prévu, la commande ci-dessus m'a téléchargé 10 copies de la page Web. Vous pouvez définir le numéro que vous souhaitez avec seq.

Pour plus d'informations sur la manière d'exécuter la même commande en parallèle, vous pouvez vérifier les exemples fournis par GNU-parallèle de ici . De l'exemple page,

Si vous souhaitez exécuter la même commande avec les mêmes arguments 10 fois parallèlement, vous pouvez faire:

sEQ 10 | parallèle -n0 my_command my_args

[~ # ~] Edit [~ # ~ #]

Maintenant, pour tirer parti de l'exécution parallel, vous pouvez utiliser la commande comme,

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

Les -j L'option est quelque chose qui pourrait spécifier les travaux totaux pouvant être exécutés en parallèle basé sur le total des cœurs de la CPU.

5
Ramesh