背景:项目通过公网地址去访问第三方接口,如访问微信获取openId接口,请求时长有时长达20秒。
经分析得出,LINUX DNS客户端解析缓慢的其中一个原因是CentOS 6/CentOS 7总是需要等待AAAA(IPv6)的结果,即使关闭IPv6也没什么卵用。CentOS 6/CentOS 7中的DNS解析器对于ipv4和ipv6都使用同一个socket接口(如下图),在同时发出ipv4和ipv6解析请求后,只会收到一个ipv4的解析响应,此时socket将一处于“等待”模式,等待ipv6的解析响应,故导致解析缓慢。
解决方案:
在/etc/resolv.conf 中添加single-request-reopen后就可以重新打开一个新的socket接收ipv6的解析响应,而不影响ipv4的解析响应。
至此问题得到解决 ,如下图,访问微信接口时间不在出现十几秒的情况。