3

編集: 原因の一部が見つかりました - 下を参照してください。

私は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に設定しました。

http://community.centrify.com/t5/Express-for-Mac-Tips-and-Tricks/Using-local-domains-with-Centrify-Directcontrol-on-the-Mac/ba-p/3724

私の 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) で異なる理由はまだわかりません。

4

2 に答える 2

2

PHPアプリコードはcurl_multi_selectを使用しており、デフォルトのタイムアウトは1秒です。この遅延を0.00005秒に変更すると、コールリターンがはるかに速くなります。それが遅延の原因です。ただし、これがLinuxとOSXで異なる理由、または私が構築したphp / libcurlの特定のフレーバー(5.3.8)がなぜ異なるのかはまだわかりません。

別のSO質問を開いて、curl_multi_selectの問題を解決しようとしています。

于 2012-05-25T01:53:59.927 に答える