bashシェルスクリプトからサービスURLを並行して呼び出す方法は?


8

別のアプリケーションから呼び出しているサービスがあります。以下は私が呼び出している私のサービスURLです-

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

上記のサービスURLを1つずつ順番に呼び出すのではなく、マルチスレッドで負荷テストを行う必要があります。

bashシェルスクリプトからの方法はありますか?マルチスレッドで呼び出すことにより、上記のサービスURLに負荷をかけることができますか?可能であれば、URLを超えて60〜70のスレッドを並行して非常に高速に呼び出すことができますか?

回答:


13

このようにマルチスレッディングとは呼びませんが、70個のジョブをバックグラウンドで起動するだけで済みます。

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

これにより、70のwgetプロセスが同時に実行されます。次の小さなスクリプトのように、より洗練された処理を行うこともできます。

#!/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

ありがとう。私は今それを得たので、私はちょうど70の値を増やすことができますか?これは、この負荷テストを一貫して10〜15分間続けることは可能ですか?
デヴィッド・

@ user2809564更新された回答を参照してください。
terdon

確かに、編集ありがとうございます。上記のスクリプトを実行すると、エラーが発生しましたpgrep: invalid option -- 'c'。なぜだかわかりませんが、何が理由だと思いますか?
デビッド2014

@ user2809564おそらく別のpgrep実装があります。これはLinuxですか?どれ?とにかく、あなたはその行をif [ $(pgrep wget | wc -l) -lt 70 ]; then
terdonに

9

abを試してください、あなたも素晴らしい統計を得ます:

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

この呼び出しは、70の並列クエリの同時実行で10000のリクエストを実行します。


どうすればApacheベンチをインストールできRed Hat Enterprise Linux Server release 6.3ますか?
デビッド2014

1
yum install httpd-tools記載serverfault.com/a/363775/10989
RJHunter

5

あなたはGNU Parallelをインストールしてみることができます。あなたはここからいくつかのGNU並列の例を得ることができます

テスト中

gnu-parallelは自分のマシンにソースからインストールし、それを機能させることができました。

ここからソースからインストールできます。私はRedHatのシステムを持っているので、私は、Fedoraのパッケージをダウンロードして、走った.configuremakemake install取得するparallel私のシステムにインストールされています。

インストールが成功した後、ディレクトリを作成checkingし、以下のコマンドを実行しました。

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

予想通り、上記のコマンドでWebページのコピーが10個ダウンロードされました。あなたが望む数を設定することができますseq

同じコマンドを並行して実行する方法の詳細については、ここからgnu-parallelによって提供される例を確認できます。サンプルページから、

同じ引数で同じコマンドを10回並行して実行したい場合は、次のようにします。

seq 10 | パラレル-n0 my_command my_args

編集

さて、を利用するにはparallel、実行、次のようなコマンドを使用することができ、

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

この-jオプションは、CPUコアの合計に基づいて並行して実行できるジョブの合計を指定できるものです。


Rameshに感謝します。このアプローチで私のサービスを呼び出す回数は何回ですか?
デビッド2014

@ user2809564、更新を参照してください。
Ramesh 2014

涼しい。また、この負荷テストを一貫して10〜15分間続けることは可能ですか?
デヴィッド・

この例は、より多くの洞察を提供すると思います。stackoverflow.com/a/7627103/1742825
Ramesh

@ user2809564、私が使用する提案を得た場所でこの質問も参照してくださいGNU parallelunix.stackexchange.com/questions/114962/...
ラメシュ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.