php 多个curl 很慢,PHP下CURL异常慢

几个星期前,碰到一个特别头疼的问题,各种办法,原因都想过,排查过,就是找不到原因。

就是PHP,在使用其他域名接口的时候,非常慢。

可能问题出现在:

目标服务器响应慢

和服务器建立连接慢

首先,我们需要排除掉目标服务器是否慢,这很简单,找另外的机子去访问同样的接口,或者找目标服务器人员排查。这个不是我们这次的重点。

其次,来分析分析第二个问题。一件一件排查。

先列出可能原因:

IP路由不通(ping 目标IP排查)

域名DNS不对(ping 目标域名排查)

IPv6,IPv4设置不对(wget http://www.baidu.com排查)

排查上面三个都没有问题,然后用wget直接访问接口,飞快。这就头疼了,我就以为是curl的bug了,那就用fsocket来改改,还是一样。file_get_content也是一样。那我就没辙了,网上查,有说是http版本的问题,那好吧,强制使用HTTP 1.0和HTTP 1.1都没解决。还好是测试环境的,不是正式环境。

到这里,就不得不怀疑是PHP出问题了,发现,上面的排查方式不对,都是用shell去排查的,不是在PHP环境内部。严格来说,不形成有效对比。OK,那就在PHP中排查一下吧。

对于第一点

IP路由不通。

那就PHP中用curl 访问对方 对方IP和端口;结果是通畅的.

域名DNS不对

那就CURl 访问对方的域名和端口,不通.

IPv6,IPv4设置不对

这个根本没设置,不存在问题.

综上,基本确定问题,PHP中,DNS不过.域名解析不出来!!!这就是结果,但是在shell中又能够解析!!!

进一步证实想法,PHP中有一个函数,gethostbyname(),能够通过域名,查找到对应IP,试了一下,果然,得不到结果。

突然想起,最近几天,电信有个域名解析服务器(DNS)失效了,可能跟这个有关了。

最终,重启了一下PHP,OK,没问题了。

最后总结了下,很有可能是PHP把DNS域名解析服务器给缓存起来了,不重启,没法更新。这种情况下,碰到解析服务器失败,就会出现上面那种问题。虽然解决方法很简单,但是找到这个问题,还真是费了好大的劲。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值