Intereting Posts
Альтернативы сыру Как установить Java и какую версию? Кто должен владеть / var / log и / var / tmp Сброс времени после перезагрузки Могу ли я записать образ диска ISO Ubuntu на DVD, чтобы установить его? когда соединение IPv6 нарушено, что является лучшим вариантом: отключить ipv6 и установить miredo? Соединение HDMI / VGA разрезает границы экрана или создает размытый текст Как создать комбинацию клавиш для поворота монитора в Unity? Grub не отображается при запуске для Windows 8.1 Ubuntu 13.10 Двойная загрузка Можно ли хранить документы в Ubuntu One и редактировать их в Интернете? Как я могу использовать DBus для создания клиента и сервера без конфигурационных файлов dbus в последних версиях Ubuntu? Какая версия Debian – это разные версии Ubuntu на основе? Установка проблемы Ubuntu «раздел, назначенный для запуска со смещением», ssh подключается, но не выполняется, если я не передаю параметр -t Phpunit перестает работать после обновления до 11.04

Curl медленный multithreading dns

Программа создана на C ++ и индексирует веб-страницы, поэтому все домены являются случайными именами доменов из Интернета. Странная часть состоит в том, что dns fail / not found процент мал (> 5%).

вот трассировка pmp:

  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,protocol_done=protocol_done@entry=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 так много streamов? Что я могу сделать, чтобы ускорить это.

Может быть, потому, что я использую синхронный DNS- CURLOPT_NOSIGNAL по умолчанию curl с CURLOPT_NOSIGNAL ?

Программа работает на Intel I7 (8 ядер HT), 16 ГБ оперативной памяти, Ububtu 12.10.

Полоса пропускания варьируется от 6 Мбит / с (предел ISP) -> 2 Мбайт / с при нерегулярном интервале, а иногда даже падает до нескольких 100 КБ / с.

Потоки, которые вы видите, вероятно, ждут ответа DNS. Одним из способов ускорения этого было бы сделать предварительный поиск, поэтому они будут кэшироваться на вашем рекурсивном DNS-сервере соседа. Также убедитесь, что никто не просит авторитарных ответов, это всегда медленно.

Я обнаружил, что решение состоит в том, чтобы изменить переменную rotl dns resolver на c-ares и специально спросить ipv4 поскольку ipv6 еще не поддерживается моей сетью.

Переход на c-ares также позволил мне добавить дополнительные серверы dns и окружить их, чтобы улучшить количество запросов DNS.

Исход:

 //set to ipv4 only curl_easy_setopt(curl, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); //cicle dns Servers dns_index=DNS_SERVER_I; pthread_mutex_lock(&running_mutex); if(DNS_SERVER_I>DNS_SERVERS.size()) { DNS_SERVER_I=1; }else { DNS_SERVER_I++; } pthread_mutex_unlock(&running_mutex); string dns_servers_string=DNS_SERVERS.at(dns_index%DNS_SERVERS.size())+","+DNS_SERVERS.at((dns_index+1)%DNS_SERVERS.size())+","+DNS_SERVERS.at((dns_index+2)%DNS_SERVERS.size()); // set curl DNS (option available only when curl is built with c-ares) curl_easy_setopt(curl, CURLOPT_DNS_SERVERS, &dns_servers_string[0]);