2013-04-11 50 views
0

该程序是用C++编写的,它为网页编制索引,因此所有域都是来自网络的随机域名。奇怪的部分是dns fail/not found百分比很小(> 5%)。卷曲缓慢多线程dns

这里是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,[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这么多线程?我能做些什么来加速它。

难道是因为我使用curl的默认同步DNS解析器与CURLOPT_NOSIGNAL

该程序运行在英特尔I7(8核心HT),16GB RAM,Ububtu 12.10上。

带宽从6MB/s(ISP限制) - > 2MB/s以不规则的间隔变化,有时甚至会降至几个100KB/s。

回答

0

我发现解决方案是将默认curl dns解析器更改为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]); 
1

您看到的线程可能正在等待DNS答案。加快速度的一种方法是预先查找,以便将它们缓存到邻居递归DNS服务器中。也请确保没有人要求自主答案,即总是慢。

+0

所有设置都是默认的,我只是增加了一些DNS服务器和设置他们转动。我已经测试了多达2000个dns查询/ s的系统,并且都很好,但似乎curl可能会以不同的方式处理dns。我如何判断curl是否要求权威性的答案?我也可以指定不要求IPV6(AAAA),因为我的网络还不支持它。 – 2013-04-15 16:39:54

+0

什么是“邻居递归DNS服务器”?也可以扩展查找预先的方法吗? – 2013-04-15 16:41:10