Я должен протестировать код ответа 1 миллиарда (да с "B") страницы. Я совершенно знаю, что, неважно, как я скручиваю его, потребуется много дней, чтобы сделать. У меня есть время.
Однако мой текущий сценарий, кажется, только делает ~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
Как я могу оптимизировать свой сценарий?
Используйте --head
(или -I
) для выборки просто заголовков, а не заголовков плюс содержание веб-страницы. В зависимости от размера веб-страниц это может уменьшить сетевой трафик.
Вы уже указали, что вывод должен быть отброшен, таким образом, никакое время не потеряно, пишущий это в файл. Поэтому единственное сокращение, которое это даст, находится на стороне сервера и в сети. Сервер на самом деле не отправит страницу по сети, но это может все еще генерировать его или получить его от кэша.