Программа создана на C++ и индексирует веб-страницы, поэтому все домены являются случайными именами доменов из Интернета. Странная часть состоит в том, что процент dns fail
/not found
небольшой (> 5%).Curl slow multithreading dns
здесь РМР трассировки стека:
3886 __GI___poll,send_dg,buf=0xADDRESS,__libc_res_nquery,__libc_res_nquerydomain,__libc_res_nsearch,_nss_dns_gethostbyname3_r,gaih_inet,__GI_getaddrinfo,Curl_getaddrinfo_ex
601 __GI___poll,Curl_socket_check,waitconnect,singleipconnect,Curl_connecthost,ConnectPlease,[email protected]=0xADDRESS),Curl_connect,connect_host,at
534 __GI___poll,Curl_socket_check,Transfer,at,getweb,athread,start_thread,clone,??
498 nanosleep,__sleep,athread,start_thread,clone,??
50 __GI___poll,Curl_socket_check,Transfer,at,getweb,getweb,athread,start_thread,clone,??
15 __GI___poll,Curl_socket_check,Transfer,at,getweb,getweb,getweb,athread,start_thread,clone
7 nanosleep,usleep,main
Почему так много потоков в _nss_dns_gethostbyname3_r
? Что я могу сделать, чтобы ускорить это.
Может ли это быть потому, что я использую синхронный DNS-рекордер по умолчанию curl с CURLOPT_NOSIGNAL
?
Программа работает на Intel I7 (8 ядер HT), 16 ГБ оперативной памяти, Ububtu 12.10.
Полоса пропускания варьируется от 6 Мбит/с (предел ISP) -> 2 МБ/с при нерегулярном интервале, и иногда она даже падает до нескольких 100 КБ/с.
Все настройки по умолчанию, я добавил несколько серверов DNS и установить их вращаться. Я тестировал систему до 2000 запросов DNS, и все это хорошо, но кажется, что завиток может обрабатывать dns по-разному. Как я могу узнать, спрашивает ли завиток авторитетные ответы? также я могу указать, чтобы не запрашивать IPV6 (AAAA), поскольку моя сеть еще не поддерживает его. –
Что такое «соседний рекурсивный DNS-сервер»? также вы могли бы расширить метод поиска заранее? –