web-dev-qa-db-ja.com

curl並列リクエストを高速化する

10億ページ(「B」が表示されます)の応答コードをテストする必要があります。どのようにひねっても、何日もかかることを完全に承知しています。私は時間があるよ。

ただし、現在のスクリプトは1秒あたり200しかないようです。これは十分に高速ではありません。このレートでは2か月かかります。

mycurl() {
    response=$(curl --write-out %{http_code} --silent --output /dev/null http://www.example.com/test/$1)
    echo "$1"
    if [ "$response" == "200" ]; then
        echo "valid" > "enum/$1" | cat
    fi
}
export -f mycurl

i=0

seq 1000000000 | parallel -j0 mycurl

parallelの速度が速すぎます(つまり、何かを待っている)。

私はこれを見つけましたが、それを機能させる方法については不明です: https://www.gnu.org/software/parallel/sem.html

スクリプトを最適化するにはどうすればよいですか?

4
Slava Knyazev

ヘッダーとWebページのコンテンツではなく、--head(または-I)を使用してヘッダーのみをフェッチします。 Webページのサイズによっては、これによりネットワークトラフィックが減少する場合があります。

出力を破棄するようにすでに指定しているので、ファイルに書き込む時間は失われません。したがって、これがもたらす唯一の削減は、サーバー側とネットワーク上です。サーバーは実際にはページをネット経由で送信しませんが、それでもページを生成したり、キャッシュから取得したりできます。

1
Jos