target=${1:-http://web1.com}
while true
do
for i in $(seq 10)
do
curl $target > /dev/null &
done
wait
done
私はプログラミング、特にbashの初心者です。一度に 10 個の HTTP リクエストを生成して HTTP 負荷分散をトレーニングしたいと思います。 15000に達すると、要求の送信を停止します。
コードはどのように書くのですか?ありがとう
答え1
達成する目標がcurl
合計15,000回の呼び出しである場合は、外部ループを1,500回実行するだけです。
内部ループを10回実行するのと同様に、外部ループを1500回実行するとこれを達成できます。
target=${1:-http://web1.com}
j=0
while [ "$j" -lt 1500 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
done
wait
j=$(( j + 1 ))
done
あるいは、コールの総数を計算して、外部ループを調整することなく、curl
内部ループの実行数を変更しながらも、curl
同じコールの総数を維持することができます。
target=${1:-http://web1.com}
n=15000
while [ "$n" -gt 0 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
n=$(( n - 1 ))
done
wait
done
テスト[ "$n" -gt 0 ]
は本物厳密にゼロより大きい限りn
。
または、n
内部ループ内の縮小を防ぐには、次の手順を実行します。
target=${1:-http://web1.com}
n=15000
while [ "$n" -gt 0 ]; do
for i in {0..9}; do
curl "$target" >/dev/null &
done
n=$(( n - 10 ))
wait
done
xargs
または、並列に実行できるユーティリティがあり、-P
10個のプロセスを継続的に実行しようとしますcurl
。
target=${1:-http://web1.com}
n=15000
yes | head -n "$n" | xargs -I {} -P 10 curl "$target" >/dev/null
これはyes
15000行を使用して生成し、すべての行が使い果たされるまで常に10個のプロセスを実行するコマンドhead
に供給します(読み取った各行に1つのプロセスが作成されます)。結果行の実際の内容は単一文字ですが、削除され、まったく使用されません。xargs
curl
curl
head
yes
y