curl slow connect_time

时间:2012-06-21 17:05:09

标签: php curl

在我的VPS服务器上的php文件中考虑此代码:

<?php $url = 'http://www.google.com';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; rv:1.7.3)     Gecko/20041001 Firefox/0.10.1" );
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$content = curl_exec($ch);
$ci = curl_getinfo($ch);
curl_close($ch);
var_dump($ci); ?>

返回此

array(22) { 
["url"]=> string(21) "http://www.google.com" 
["content_type"]=> string(24) "text/html; charset=UTF-8" 
["http_code"]=> int(200) 
["header_size"]=> int(2055) 
["request_size"]=> int(147) 
["filetime"]=> int(-1) 
["ssl_verify_result"]=> int(0) 
["redirect_count"]=> int(0) 
["total_time"]=> float(50.095466) 
["namelookup_time"]=> float(0.001114) 
["connect_time"]=> float(50.019724) 
["pretransfer_time"]=> float(50.019825) 
["size_upload"]=> float(0) 
["size_download"]=> float(23156) 
["speed_download"]=> float(462) 
["speed_upload"]=> float(0) 
["download_content_length"]=> float(-1) 
["upload_content_length"]=> float(0) 
["starttransfer_time"]=> float(50.070702) 
["redirect_time"]=> float(0) 
["certinfo"]=> array(0) { } 
["redirect_url"]=> string(0) 
"" }

在一天中的几次测试之后,&#34; connect_time&#34;始终处于50秒大关。我相信如果不是在1秒及以下,它应该快10倍。

我对服务器配置知之甚少,但有人告诉我,我的服务器的CPU或RAM可能有问题。我使用top命令行显示以下内容对我来说似乎很好:

  

任务:总共80次,1次跑步,79次睡眠,0次停止,0次僵尸

     

Cpu(s):0.0%us,0.0%sy,0.0%ni,100.0%id,0.0%wa,0.0%hi,0.0%si,   0.0%ST

     

回忆:共计2097152k,使用1273128k,免费824024k,0k   缓冲器

     

交换:总共0k,使用0k,0k自由,0k   缓存

我想知道这个问题的根源是什么?

编辑:附加信息

ping www.google.com结果。好像它可以继续进行,所以我在第195行之后停止了命令

  

PING www.l.google.com(74.125.224.178)56(84)字节数据。

     来自lax02s01-in-f18.1e100.net(74.125.224.178)的

64字节:icmp_seq = 1   ttl = 56时间= 12.0毫秒

     来自lax02s01-in-f18.1e100.net(74.125.224.178)的

64字节:icmp_seq = 2   ttl = 56时间= 12.1毫秒

     来自lax02s01-in-f18.1e100.net(74.125.224.178)的

64字节:icmp_seq = 3   ttl = 56时间= 11.9毫秒

     

...

     来自lax02s01-in-f18.1e100.net(74.125.224.178)的

64字节:icmp_seq = 194   ttl = 56时间= 11.9毫秒

     来自lax02s01-in-f18.1e100.net(74.125.224.178)的

64字节:icmp_seq = 195   ttl = 56时间= 11.9毫秒

     

--- www.l.google.com ping统计信息---传输195个数据包,收到194个数据包,丢失0%,时间194711ms

traceroute wwww.google.com结果

  

traceroute到www.google.com(74.125.224.180),最多30个跃点,60个字节   包

     

1 ip- - - * - .ip.secureserver.net(。*。)0.585 ms   0.642 ms 0.778 ms

     

2 be10.trmd0215-01.ars.mgmt.phx3.gdg(208.109.112.126)0.599 ms   0.777 ms 0.893 ms

     

3 ip-97-74-253-122.ip.secureserver.net(97.74.253.122)11.840 ms   12.119 ms 12.275 ms

     

4 ip-97-74-253-122.ip.secureserver.net(97.74.253.122)12.389 ms   12.482 ms 12.600 ms

     

5 PR01.LAX03.google.com(206.223.123.21)11.739 ms 11.709 ms   11.707毫秒

     

6 209.85.248.185(209.85.248.185)11.986 ms 11.797 ms 11.781 ms

     

7 72.14.236.11(72.14.236.11)12.606 ms 12.363 ms 12.328 ms

     

8 lax02s01-in-f20.1e100.net(74.125.224.180)11.774 ms 11.864 ms   11.842 ms

2 个答案:

答案 0 :(得分:18)

尝试:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4 ); 

以上内容将阻止cURL首先尝试IPv6。

答案 1 :(得分:0)

我刚刚运行了您提供的相同配置并获得了以下内容:

array
  'url' => string 'http://www.google.com' (length=21)
  'content_type' => string 'text/html; charset=UTF-8' (length=24)
  'http_code' => int 200
  'header_size' => int 2079
  'request_size' => int 151
  'filetime' => int -1
  'ssl_verify_result' => int 0
  'redirect_count' => int 0
  'total_time' => float 0.281
  'namelookup_time' => float 0
  'connect_time' => float 0
  'pretransfer_time' => float 0
  'size_upload' => float 0
  'size_download' => float 23168
  'speed_download' => float 82448
  'speed_upload' => float 0
  'download_content_length' => float -1
  'upload_content_length' => float 0
  'starttransfer_time' => float 0.187
  'redirect_time' => float 0
  'certinfo' => 
  array
    empty
  'redirect_url' => string '' (length=0)

我的猜测是你的服务器连接本身可能存在带宽问题和/或被另一个进程以某种方式征税。