私は次のbashスクリプトで並列にcurlバックグラウンドプロセスを実行しています
START=$(date +%s)
for i in {1..100000}
do
curl -s "http://some_url_here/"$i > $i.txt&
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
done
49Gb Corei7-920専用サーバー(仮想ではない)を使用しています。
私はtop
コマンドを使用してメモリ消費とCPUを追跡していますが、それらは境界から遠く離れています。
現在のcurlプロセスの数をカウントするためにps aux | grep curl | wc -l
を使用しています。この数は2から4千まで急速に増加し、その後継続的に減少し始めます。
Curlがawk(curl | awk > output
)にパイピングして単純な解析を追加すると、curlプロセスの数が1から2千まで増加し、その後20から30に減少します...
プロセスの数がなぜそれほど劇的に減少するのですか?このアーキテクチャの境界はどこにありますか?
厳格な質問に従ってください:
mycurl() {
START=$(date +%s)
curl -s "http://some_url_here/"$1 > $1.txt
END=$(date +%s)
DIFF=$(( $END - $START ))
echo "It took $DIFF seconds"
}
export -f mycurl
seq 100000 | parallel -j0 mycurl
タイミングの前後のボイラープレートテキストが必要ない場合は、さらに短くします。
seq 100000 | parallel -j0 --joblog log curl -s http://some_url_here/{} ">" {}.txt
cut -f 4 log
1000を並行して実行したい場合は、いくつかの制限(ファイルハンドルなど)に達します。 ulimit -nまたは/etc/security/limits.confを上げると役立つ場合があります。
for i in {1..100000}
ポートは65536のみです。これをスロットルします。
for n in {1..100000..1000}; do # start 100 fetch loops
for i in `eval echo {$n..$((n+999))}`; do
echo "club $i..."
curl -s "http://some_url_here/"$i > $i.txt
done &
wait
done
(編集: echo
curl
(編集:OS制限に関する厳格な日付のアサーションを削除し、不足しているwait
を追加)