Bashスクリプトで何千ものカールバックグラウンドプロセスを並列に実行する

Bashスクリプトで何千ものカールバックグラウンドプロセスを並列に実行する

私は何千もの走っています。カールNext bashスクリプトの並列バックグラウンドプロセス

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専用サーバー(非仮想)があります。

命令によるメモリ消費とCPUの追跡にtop制限はありません。

ps aux | grep curl | wc -l現在の数量を計算するために使用します。カールプロセス。この数は2〜4,000人に急速に増加し、続いて減少し始めました。

カールパイピングを介してawk()にcurl | awk > output簡単な解析を追加すると、カールプロセスの数が1〜2000に増加し、次に20〜30に減少します。

プロセス数が大幅に減ったのはなぜですか?このアーキテクチャの境界はどこにありますか?

ベストアンサー1

次の質問に厳密に従います。

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 を増やすと便利です。

おすすめ記事