该程序是用 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
?我该怎么做才能加快速度。
可能是因为我使用 curl 的默认同步 DNS 解析器CURLOPT_NOSIGNAL
吗?
该程序在英特尔 I7(8 核 HT)、16GB 内存、Ububtu 12.10 上运行。
带宽从 6MB/s(ISP 限制)-> 2MB/s 不定期变化,有时甚至会下降到 100KB/s。