2012-06-21 4 views
6

Рассмотрим этот код в файл PHP на моем VPS сервере:свернуться Slow connect_time

<?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) 
"" } 

После тестирования в несколько раз в день «connect_time» последовательно на 50 секунд. Я считаю, что он должен быть на 10 раз быстрее, если не на отметке 1 секунда и ниже.

Я не осведомлен о конфигурации сервера, но мне сказали, что процессор или операционная система моего сервера могут быть виноваты. Я использовал верхнюю командную строку для отображения следующего, который кажется хорошо для меня:

Задачи: 80 всего, 1 погонных, 79 спать, 0 остановился, 0 зомби

Cpu (s): 0,0% нас , 0,0% С.Ю., 0,0% Ni, 100,0% ID, 0,0% ва, 0,0% привет, 0,0% Si, 0,0% ул

Mem: 2097152k всего, 1273128k используется, 824024k свободный, 0k буферы

своп: 0k всего, 0k б/у, 0k свободный, 0k cached

Мне интересно, что может быть источником этой проблемы?

EDIT: ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ

пинг www.google.com результат. Казалось, что это может продолжаться, поэтому я остановил команду после 195-й линии.

PING www.l.google.com (74.125.224.178) 56 (84) байтов данных.

64 байта от lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 1 TTL = 56 время = 12,0 мс

64 байта от (lax02s01-in-f18.1e100.net 74.125.224.178): icmp_seq = 2 ТТЛ = 56 время = 12,1 мс

64 байта от lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 3 TTL = 56 время = 11,9 мс

...

64 байт от lax02s01- in-f18.1e100.net (74.125.224.178): icmp_seq = 194 ТТЛ = 56 время = 11,9 мс

64 байта от lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 195 TTL = 56 время = 11,9 мс

--- www.l.google.com статистика пинг --- 195 пакетов передаются, 194 получено, 0% потери пакетов, время 194711ms

трассировку wwww.google .com result

traceroute на www.google.com (74.125.224.180), 30 хмель макс, 60 байт пакетов

1 Ашд - - * -. .ip.secureserver.net ( * ) 0,585 мс 0,642 мс 0,778 мс

..

2 be10.trmd0215-01.ars.mgmt.phx3.gdg (208.109.112.126) 0,599 мс 0,777 мс 0,893 мс

3 ip-97-74-253-122.ip.secureserver.net (97.74. 253,122) 11,840 мс 12,119 мс 12,275 мс

4 ip-97-74-253-122.ip.secureserver.net (97.74.253.122) 12.389 мс 12,482 мс 12.600 мс

5 PR01.LAX03.google.com (206.223.123.21) 11.739 мс 11.709 мс 11.707 мс

6 209.85.248.185 (209.85.248.185) 11.986 мс 11.797 мс 11.781 мс

7 72.14.236.11 (72.14.236.11) 12.606 мс 12.363 мс 12.328 мс

8 lax02s01- inf20.1e100.net (74.125.224.180) 11.774 мс 11.864 мс 11.842 мс

+1

Какое у вас сетевое соединение, как выглядят ресурсы на хосте VPS? Выполнение вышеуказанных работ в течение 1-3 секунд для меня на нескольких платформах. Это локально для вашей установки. Можете ли вы выполнить ping/traceroute в Google и обновить свой вопрос? Вероятно, это должно быть в serverfault. –

+0

спасибо sixeightzero, я добавил, что информация на мой вопрос – JSL

+0

изменила мою конфигурацию резольвера (resolv.config) на iphone сервера имен Google. Не помогло – JSL

ответ

18

Try:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

выше предотвратит Curl от попыток IPv6 первым.

+2

Как упоминалось в комментариях к OP, это делает трюк. Казалось бы, на google.com включен IPV6, но трафик маршрутизируется неправильно. cURL показалось, что время ожидания (что объясняет постоянное время соединения 50 секунд) и в конечном итоге отпадает на IPV4 для подключения. Спасибо всем, кто помог – JSL

+2

Я люблю тебя StackOverflow. Это помогло мне больше, чем просто Google.com, но это определенно зависало с моими вызовами API. Я заметил, что мой удаленный сервер сделал IPv4 по умолчанию, поэтому он был значительно быстрее, чем мой localhost. –

+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) 

Я думаю, что подключение к серверу сама может быть возникли проблемы с пропускной способностью и/или налогооблагаемого каким-то другим процессом.

+2

Большое спасибо. Да, это те значения времени, которые я считаю нормальными для этой работы cURL. Вы видите что-то не так с результатом верхней команды, которую я написал выше? – JSL

Смежные вопросы