他のアプリケーションから呼び出されるサービスがあります。以下は私が呼び出すサービスURLです。
http://www.betaservice.domain.host.com/web/hasChanged?ver=0
上記のサービスURLを順番に1つずつ呼び出すのではなく、マルチスレッド方式でロードテストを実行する必要があります。
bashシェルスクリプトがマルチスレッド方式で呼び出して上記のサービスURLをロードする方法はありますか?可能であれば、上記のURLを非常に迅速に並列に呼び出す60〜70のスレッドを持つことはできますか?
答え1
マルチスレッドとは呼ばれませんが、単にバックグラウンドで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
答え2
abを試してみると、良い統計も得られます。
ab -n 10000 -c 70 http://www.betaservice.domain.host.com/web/hasChanged?ver=0
この呼び出しは、70個の並列クエリと同時に10,000個の要求を実行します。
答え3
GNU Parallelをインストールしてみることができます。以下からGNUパラレルの例を得ることができます。ここ。
テスト
私のコンピュータのソースからインストールして動作さgnu-parallel
せることができます。
ソースコードからインストールできますここ。私はRedhatシステムを持っているので、fedoraパッケージをダウンロードして実行してシステム.configure
にインストールしました。make
make install
parallel
正常にインストールしたら、ディレクトリを作成してchecking
次のコマンドを実行しました。
seq 10 | parallel -n0 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0
予想通り、上記のコマンドはWebページのコピーを10個ダウンロードしました。希望の番号を設定して使用できますseq
。
同じコマンドを並列に実行する方法の詳細については、gnu-parallelが提供する例を参照してください。ここ。例ページから
同じパラメーターを使用して同じコマンドを10回並列に実行するには、次のようにします。
シーケンス10 |パラレル -n0 my_command my_args
編集する
これでparallel
、実行を利用するために次のコマンドを使用できます。
seq 70 | parallel -j70 wget http://www.betaservice.domain.host.com/web/hasChanged?ver=0
この-j
オプションは、CPUコアの総数に基づいて並列に実行できるジョブの総数を指定します。