2012-06-21 29 views
6

xem xét mã này trong một file php trên máy chủ VPS của tôi:cuộn tròn connect_time chậm

<?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); ?> 

lợi nhuận này

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

Sau khi thử nghiệm tại một số thời điểm trong ngày, "connect_time" là liên tục tại 50 giây đánh dấu. Tôi tin rằng nó sẽ nhanh hơn 10X nếu không phải ở điểm 1 giây trở xuống.

Tôi không am hiểu về cấu hình máy chủ nhưng tôi được thông báo rằng CPU hoặc RAM của máy chủ của tôi có thể bị lỗi. Tôi đã sử dụng dòng lệnh trên để hiển thị sau đó có vẻ tốt với tôi:

Nhiệm vụ: 80 tổng, 1 chạy, 79 ngủ, 0 dừng lại, 0 zombie

Cpu (s): 0.0% chúng tôi , 0.0% sy, 0.0% ni, 100,0% id, 0.0% wa, 0.0% hi, 0.0% si, 0.0% st

Mem: tổng 2097152k, 1273128k sử dụng, 824024k miễn phí, 0k đệm

Hoán đổi: tổng cộng 0k, 0k được sử dụng, 0k miễn phí, 0k được lưu trong bộ nhớ cache

Tôi tự hỏi điều gì có thể là nguồn gốc của vấn đề này?

CHỈNH SỬA: THÔNG TIN BỔ SUNG

ping www.google.com result. Dường như nó có thể tiếp tục foreover nên tôi đã dừng lệnh sau dòng 195.

PING www.l.google.com (74.125.224.178) 56 (84) byte dữ liệu.

64 byte từ lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 1 ttl = 56 time = 12,0 ms

64 byte từ lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 2 ttl = 56 time = 12,1 ms

64 byte từ lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 3 ttl = 56 time = 11,9 ms

...

64 byte từ lax02s01- in-f18.1e100.net (74.125.224.178): icmp_seq = 194 ttl = 56 time = 11,9 ms

64 byte từ lax02s01-in-f18.1e100.net (74.125.224.178): icmp_seq = 195 ttl = 56 time = 11,9 ms

--- www.l.google.com thống kê ping --- 195 gói tin truyền đi, 194 nhận được, 0% mất gói tin, thời gian 194711ms

traceroute wwww.google .com kết quả

truy cập vào www.google.com (74.125.224.180), 30 nhảy max, 60 byte gói

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 ms

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

+1

Bạn có loại kết nối mạng nào, tài nguyên trên máy chủ VPS trông như thế nào? Chạy các tác phẩm trên trong vòng 1-3 giây đối với tôi trên một số nền tảng. Nó là một cái gì đó địa phương để thiết lập của bạn. Bạn có thể ping/traceroute đến google và cập nhật câu hỏi của bạn? Điều này có lẽ nên ở trong serverfault. –

+0

cảm ơn bạn sixeightzero, tôi đã thêm thông tin đó vào câu hỏi của tôi – JSL

+0

đã thay đổi cấu hình resolver (resolv.config) thành ip máy chủ định danh của Google. Không giúp được – JSL

Trả lời

18

Hãy thử:

curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); 

trên sẽ ngăn chặn cURL từ cố gắng IPv6 đầu tiên.

+2

Như đã đề cập trong các ý kiến ​​OP, điều này làm các trick. Dường như google.com đã bật IPV6 nhưng lưu lượng truy cập được định tuyến không chính xác. cURL dường như đã hết thời gian chờ (sẽ giải thích kết nối liên tục trong 50 giây) và cuối cùng sẽ quay trở lại IPV4 để kết nối. Nhờ tất cả những người đã giúp – JSL

+2

Tôi yêu bạn StackOverflow. Điều này đã giúp tôi không chỉ với Google.com, nhưng nó đã chắc chắn vặn vẹo với các cuộc gọi API của tôi. Tôi nhận thấy máy chủ từ xa của tôi đã làm IPv4 theo mặc định đó là lý do tại sao nó nhanh hơn đáng kể so với localhost của tôi. –

+1

Chúng tôi vừa chuyển máy chủ và máy chủ mới đã bị lỗi thời gian chờ. Tôi quản lý để tìm nguồn gốc của vấn đề như curl kết nối thời gian. Tôi đã cố gắng giải quyết vấn đề thời gian kết nối chậm cho cả ngày. Bạn vừa mới cứu tôi không dành nhiều thời gian hơn vào vấn đề ghê tởm này. Cảm ơn. –

0

Tôi chỉ cần chạy cấu hình tương tự bạn đã cho và nhận như sau:

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) 

tôi đoán là kết nối máy chủ của bạn thân có thể gặp phải các vấn đề băng thông và/hoặc bị đánh thuế bằng cách nào đó bởi một tiến trình khác.

+2

Rất cám ơn. Vâng, đây là loại giá trị thời gian tôi tin là bình thường đối với công việc cURL này. Bạn có thấy điều gì sai với kết quả của lệnh trên cùng mà tôi đã đăng ở trên không? – JSL

Các vấn đề liên quan