2015-08-12 7 views
4

Я делаю следующий запрос, на который был получен пустой ответ с сервера.php guzzle [curl] 52 Пустой ответ с сервера

Originate server : AWS ec2/PHP 5.4/Guzzle 
Remote server : AWS ec2 through elb 
CURL info :{ 
    "url":"https:\/\/xxx\/xxx", 
    "content_type":null, 
    "http_code":0, 
    "header_size":0, 
    "request_size":5292, 
    "filetime":-1, 
    "ssl_verify_result":0, 
    "redirect_count":0, 
    "total_time":120.987057, 
    "namelookup_time":0.000277, 
    "connect_time":0.001504, 
    "pretransfer_time":0.014271, 
    "size_upload":2430, 
    "size_download":0, 
    "speed_download":0, 
    "speed_upload":20, 
    "download_content_length":-1, 
    "upload_content_length":2430, 
    "starttransfer_time":60.998147, 
    "redirect_time":59.988895, 
    "certinfo":[], 
    "primary_ip":"54.169.126.111", 
    "primary_port":443, 
    "local_ip":"192.168.2.111", 
    "local_port":39522, 
    "redirect_url":"" 
} 

CURL error : [curl] 52: Empty reply from server [url] https:\/\/xxx\/xxx 

Заметьте, что этого не происходит постоянно.

Похоже, что запрос даже не дошел до пункта назначения (elb), так как не было журнала, связанного с запросом
1. Возникает проблема с сервером или удаленным сервером?
2. «starttransfer_time»: 60.998147 Может ли это быть основной причиной?

Решения, обходные пути, предложения приветствуются. Спасибо!

+0

Как часто вы встречаете эту проблему? Возможно ли подключиться ко всем узлам позади ELB для проверки возможности подключения? С предоставленной вами информацией это звучит для меня как прерывистые сетевые проблемы. – Jordan

+0

мы получаем около 6000 запросов в минуту, а около 40-50 запросов получают отказ. Все эти неудачные запросы передаются в фоновый процесс для повторной попытки, который в конечном итоге становится успешным. Мы не замечаем никаких походов на процессор или память как в исходном, так и в удаленном кластерах , Нет признаков 4XX/5XX в журналах доступа к локтям. –

ответ

0

Как кажется, запрос никогда не дошел до сервера, Проверьте наличие сетевых ошибок. Любая пересылка/тайм-аут TCP или любые ошибки. Как вы уже сказали, нет ответа, это тайм-аут TCP? Запустите tcpdump и проанализируйте трассы на основе того, что вы можете решить.

Кроме того, вы можете включить уровень журнала в обоих приложениях на исходном и удаленном серверах. Проверьте шаблоны ошибок, например: это из-за высокой нагрузки?

0

В моем случае «пустой ответ с сервера» был вызван исчерпанной памятью на удаленном сервере. В этом случае была вызвана фатальная ошибка, и запрос был прерван.

Отладка cURL с curl_setopt($h, CURLOPT_VERBOSE, true); не помогла, так как там было только «Соединение умерло, повторное подключение», а затем «Пустой ответ с сервера». Нам пришлось отлаживать его на стороне удаленного сервера.

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