編集: 原因の一部が見つかりました - 下を参照してください。
私はphpから標準的なcurl呼び出しを行っています。ただし、名前解決中にハングアップするようです。私の OSX ボックスでは、namelookup_time は、同じサブネットへのこのクエリと他のクエリで一貫して 1 秒を超えています。同じクエリを実行しているサブネット上の Linux ボックスは、他のサブネットに対して 0.02 秒の応答を持っているため、これは私のボックスの問題です。
アプリがページを作成するためにこのサブネットを何度も呼び出し、秒数が加算されるため、これは問題です。
私の curl_getinfo 応答 (URL は切り取られています)
array
'url' => string ' < SNIPPED > '... (length=1449)
'content_type' => string 'text/plain; charset=utf-8' (length=25)
'http_code' => int 200
'header_size' => int 227
'request_size' => int 1480
'filetime' => int -1
'ssl_verify_result' => int 0
'redirect_count' => int 0
'total_time' => float 1.165444
'namelookup_time' => float 1.001272
'connect_time' => float 1.017765
'pretransfer_time' => float 1.017781
'size_upload' => float 0
'size_download' => float 92562
'speed_download' => float 79422
'speed_upload' => float 0
'download_content_length' => float 92562
'upload_content_length' => float 0
'starttransfer_time' => float 1.043094
'redirect_time' => float 0
'certinfo' =>
array
empty
'redirect_url' => string '' (length=0)
名前検索のラグはIPv6によるものではないかと疑っているので、以下を試してみました。
1) ここの指示に従って、再起動を含め、OSX で Ipv6 をオフにします。記事が示唆するように、IPv6 のすべてのインスタンスをINACTIVEに設定しました。
私の Mac が IPv6 をサポートしていないことをhttp://ipv6test.google.com/で確認しました。
2) --disable-ipv6 を使用して PHP を再構築しました。
php -i の表示: IPv6 サポート => 無効
ただし、curl セクションでは「IPv6 => はい」と表示されていますが、外科的にこれをオフにする方法がわかりません。
3) curl 呼び出しの前にこれを実行しました。
curl_setopt($c, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 );
残念ながら、上記の手順はどれもうまくいきませんでした。名前解決に 1 秒以上かかっています。誰かがトラブルシューティングの提案を持っていますか、それとももっと良いのは魔法の弾丸ですか? :)
(注 - 私はこの質問をグーグルで検索しましたが、役に立ちませんでした..)
編集:以下のckhanの質問に答える:
1)IPアドレスまたはFQDNを使用して、同じ1秒+ namelookup_timeを取得します:
'url' => string 'HTTP://172.19.105.171:8070 <SNIPPED> '... (length=1439)
...
'namelookup_time' => float 1.001309
2) コマンド ライン クライアントには同じ問題はありません。
# url.txt has the same url as the above curl call
time cat url.txt |xargs curl
<... response output ...>
real 0m0.053s
user 0m0.009s
sys 0m0.008s
3) dig はサーバーへのアクセスに問題はないようです。
dig 172.19.105.171
...
;; Query time: 77 msec
...
私の環境:
PHP 5.3.8
OSX 10.7.3
部分解
アプリ コードは curl_multi_select を使用しており、デフォルトのタイムアウトは 1 秒です。この遅延を 0.00005 秒に変更すると、呼び出しがはるかに速く返されます。それが遅延の原因です。ただし、これが Linux と OSX、または私が構築した特定のフレーバーの php/libcurl (5.3.8) で異なる理由はまだわかりません。