Go中http超时问题的排查及解决方法-创新互联
背景
最新有同事反馈,服务间有调用超时的现象,在业务高峰期发生的概率和次数比较高。从日志中调用关系来看,有2个调用链经常发生超时问题。
成都创新互联公司-专业网站定制、快速模板网站建设、高性价比商城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式商城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖商城地区。费用合理售后完善,十年实体公司更值得信赖。问题1: A服务使用 http1.1 发送请求到 B 服务超时。
问题2: A服务使用一个轻量级http-sdk(内部http2.0) 发送请求到 C 服务超时。
Golang给出的报错信息时:
Post http://host/v1/xxxx: net/http: request canceled while waiting for connection (Client.Timeout exceeded while awaiting headers)
通知日志追踪ID来排查,发现有的请求还没到服务方就已经超时。
有些已经到服务方了,但也超时。
这里先排查的是问题2,下面是过程。
排查
推测
调用方设置的http请求超时时间是1s。
请求已经到服务端了还超时的原因,可能是:
- 服务方响应慢。 通过日志排查确实有部分存在。
- 客户端调用花了990ms,到服务端只剩10ms,这个肯定会超时。
请求没到服务端超时的原因,可能是:
- golang CPU调度不过来。通过cpu监控排除这个可能性
- golang 网络库原因。重点排查
排查方法:
本地写个测试程序,1000并发调用测试环境的C服务:
n := 1000 var waitGroutp = sync.WaitGroup{} waitGroutp.Add(n) for i := 0; i < n; i++ { go func(x int) { httpSDK.Request() } } waitGroutp.Wait()
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
分享名称:Go中http超时问题的排查及解决方法-创新互联
文章源于:http://cdiso.cn/article/cosios.html