PHP curl 提示Connection time-out错误笔记

最近在整理电脑,发现备忘录中记了一笔关于curl timeout的问题,回想当时问题出现的场景,难得一见的问题,记录下来希望能帮助到大家。

一、问题描述
服务端对服务端API调用,使用PHP curl方法通过HTTP的方式调用API接口,压测的时候发现调用API出现大量错误”curl server is error: Connection time-out 错误码28″

我是API的提供者,通过traceid分析,我发现异常的请求根本没有到达我的服务,但是调用方拉着我不放,于是帮忙排查,也知道了问题的原因。

二、问题分析
1、在调用方的日志中打印出curl_getinfo返回的全部信息

WARNING: 20-09-10 17:50:55 [/home/work/odp/services/HttpServices.php:68] errno[0] logId[3050787586] uri[/v1/clouddoc/wos_call] refer[] cookie[NILIUID=EFFC2FF41E7F4C082400C8CF725692D2:FG=1]  cost_time[5.1368] get[a:1:{s:1:"c";s:8:"clouddoc";}] post[a:3:{s:6:"fileId";s:1:"3";s:6:"action";s:4:"view";s:6:"source";s:6:"person";}] curl server is error: Connection time-out curl_nmb 28------{"url":"http:\/\/ecloud-micromesh.dev.weiyun.niliu.com:8212\/oos\/call","content_type":null,"http_code":0,"header_size":0,"request_size":0,"filetime":-1,"ssl_verify_result":0,"redirect_count":0,"total_time":0,"namelookup_time":5.097139,"connect_time":0,"pretransfer_time":0,"size_upload":0,"size_download":0,"speed_download":0,"speed_upload":0,"download_content_length":-1,"upload_content_length":-1,"starttransfer_time":0,"redirect_time":0,"redirect_url":"","primary_ip":"","certinfo":[],"primary_port":0,"local_ip":"","local_port":0}
"namelookup_time":5.097139,--实践

2、通过日志很直观看到namelookup_time比较长

三、问题定位
1、通过跟OP交流发现,DNS查找设置了5s的超时时间
2、根本原因是两个服务端所在的服务器不再一个机房,通过重启服务,将调用方的服务调度到同一个机房,问题消失

四、总结
1、遇到curl请求超时的问题,我们一般会把connect_time这些指标打印出来看,最好的办法就是通过curl_getinfo打印全部连接时间
2、QA压测的时候遇到的这个问题,QA坚持要求不过,原因是之前没有这个问题。技术上的严格要求不一定是坏事。
3、遇到问题,是一次机会,解决问题,往往是一个工程师成长最快的时刻。

4、curl_getinfo返回关联数组信息

content_type:内容编码。
http_code:HTTP状态码。
header_size:header的大小。
request_size:请求的大小。
filetime:文件创建的时间。
ssl_verify_result:SSL验证结果。
redirect_count:跳转计数。
total_time:总耗时。
namelookup_time:DNS查询耗时。
connect_time:等待连接耗时。
pretransfer_time:传输前准备耗时。
size_uplpad:上传数据的大小。
size_download:下载数据的大小。
speed_download:下载速度。
speed_upload:上传速度。
download_content_length:下载内容的长度。
upload_content_length:上传内容的长度。
starttransfer_time:开始传输的时间表。
redirect_time:重定向耗时

参考:
https://segmentfault.com/q/1010000016161760
https://www.laruence.com/2014/01/21/2939.html
https://blog.csdn.net/hqzxsc2006/article/details/50547684
https://stackoverflow.com/questions/50836796/php-curl-connection-timed-out-error/50837035

发表评论

电子邮件地址不会被公开。 必填项已用*标注