別のアプリケーションから呼び出しているサービスがあります。以下は私が呼んでいる私のサービスURLです-
http://www.betaservice.domain.Host.com/web/hasChanged?ver=0
上記のサービスURLに対して、1つずつ順番に呼び出すのではなく、マルチスレッドで負荷テストを行う必要があります。
Bashシェルスクリプトからの方法はありますか?マルチスレッドで呼び出すことにより、上記のサービスURLに負荷をかけることができますか?可能であれば、60-70のスレッドが並列に非常に高速にURLを呼び出すことができますか?
私はそれをマルチスレッディングとは呼びませんが、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
Abを試してください。Nice統計も得られます。
ab -n 10000 -c 70 http://www.betaservice.domain.Host.com/web/hasChanged?ver=0
この呼び出しは、70の並列クエリの同時実行で10000のリクエストを実行します。
GNU parallelをインストールしてみてください。 here からGNU parallelの例をいくつか入手できます。
テスト
インストール済みgnu-parallel
私のマシンのソースから、それを機能させることができました。
here からソースからインストールできます。私は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が here から提供する例を確認できます。サンプルページから、
同じ引数で同じコマンドを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コアの合計に基づいて並行して実行できるジョブの合計を指定できるものです。