LINUX.ORG.RU

DNS resolving


0

0

Пишу небольшого кроулера на bash + curl + sed Заметил, что основная потеря скорости идёт при резолвинге DNS. Поставил pdnsd, но появилась другая проблема:

Если курлить неспеша, с большими таймаутами и в один процесс, то всё окей, а если делать cat input.urls | xargs -P 350 -l1 curl.sh То через несколько секунд после начала работы скрипта curl лавинообразно выдаёт шестую ошибку (Couldn't resolve host. The given remote host was not resolved)

При этом, если в curl.sh написать "nslookup $domain", то выполняется всё отлично, хоть xargs -P 10000 ставь.

Разве curl и nslookup не через одну и ту же библиотеку работают? Как решить эту проблему? Какой локальный кеш DNS посоветуете?

PS если вместо curl'а использовать wget, то проблема остаётся.

Ответ на: комментарий от r_asian

Спасибо за совет, но я пробовал. К тому же очевидно, что дело не в DNS сервере, ведь, при использовании nslookup'а всё работает нормально.

Может быть pdnsd глючный или как-то по особенному нужно настраивать curl?

firepug
() автор топика
Ответ на: комментарий от firepug

> Может быть pdnsd глючный

Нет, просто ты его заDoS'ил :)

YAR ★★★★★
()

Вроде бы, обычные запросы DNS идут по UDP, а nslookup — по TCP.
Если оно так (я могу ошибаться) — то либо pdnsd просто не держит высокую нагрузку по UDP, либо это такая защита от доса.

nnz ★★★★
()
Ответ на: комментарий от firepug

>А как и какой локальный DNS кеш юзать, чтобы он не досился?
В душе не представляю :)
Но если хосты всегда одни и те же — /etc/hosts, однозначно ;)

Еще можно попробовать пересобрать libcurl с поддержкой AsynchDNS. Хотя не факт, что это поможет.

Ну и маны/конфиги pdnsd посмотрите, может, там прописано ограничение на кол-во запросов.

nnz ★★★★
()
Ответ на: комментарий от nnz

AsyncDNS выглядит, как то, что нужно. Спасибо, попробую.

firepug
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.