php guzzle [curl] 52 Empty reply from server


php guzzle [curl] 52 Empty reply from server

我正在进行以下请求,结果来自服务器的空回复。

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这可能是根本原因吗?

解决方案,变通方法,建议欢迎。谢谢!

似乎请求从未到达服务器,检查网络错误。任何TCP重传/超时或任何错误。正如你提到的,没有应答意味着TCP超时吗?运行tcpdump并根据您的判断分析跟踪。

此外,您可以在源服务器和远程服务器的应用程序中启用日志级别。检查错误模式,例如:是因为高负载吗?

在我的例子中,"来自服务器的空应答"是由远程服务器上的内存耗尽引起的。在这种情况下,抛出致命错误并终止请求。

调试cURL与curl_setopt($h, CURLOPT_VERBOSE, true);没有帮助,因为只有"连接死亡,重新尝试一个新的连接",然后"来自服务器的空回复"。我们必须在远程服务器端调试它