このプログラムは C++ で作成され、Web ページのインデックスを作成するため、すべてのドメインは Web からのランダムなドメイン名です。奇妙な点は、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
でしょうか?
プログラムは Intel I7 (8 コア HT)、16GB RAM、Ububtu 12.10 で実行されています。
帯域幅は 6MB/s (ISP の制限) から 2MB/s まで不規則な間隔で変化し、時には数 100KB/s まで低下することさえあります。