一次带宽拉满引发的百分百超时血案!

博主在排查线上接口百分百超时问题时,发现出口带宽拉满是根本原因。通过反思和使用Go的httptrace,揭示了带宽耗尽导致的延迟。同时,文章指出TarsGo框架中的问题,可能导致超时控制失效,并提供了修复方案。尽管仍有对外请求耗时异常的疑虑,但替换为fasthttp后,情况有所改善。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

来自公众号:Gopher指北

偈语: 未经他人苦,莫劝他人善

鏖战两周有余,为了排查线上某接口百分百超时的原因,如今总算有些成果。虽然仍有疑虑但是碍于时间不允许和个人能力问题先做如下总结以备来日再战。

出口带宽拉满

能够发现这个问题实属侥幸。依稀记得这是一个风雨交加的夜晚,这风、这雨注定了今夜的不平凡。果然线上百分百超时的根因被发现了!

在这里插入图片描述

我们的线上接口需要对外请求,而我们的流出带宽被拉满自然耗时就长因此导致超时。当然这都是结果,毕竟中间过程的艰辛已经远远超出老许的文字所能描述的范围。

反思

结果有了,该有的反思仍旧不能少。比如流出带宽被拉满为什么没有提前预警!无论是自信带宽足够还是经验不足都值得老许记上一笔。

而在带宽问题被真正发现之前,老许内心对带宽其实已有所怀疑,但是却没有认真进行验证,只听信了他人的推测导致发现问题的时间被推迟。

httptrace

有时候不得不吹一波Go对http trace的良好支持。老许也是基于此做了一个demo,该demo可以打印http请求各阶段耗时。

在这里插入图片描述

上述为一次http请求各阶段耗时输出,有兴趣的可去https://github.com/Isites/go-coder/blob/master/httptrace/trace.go拿到源码。

老许对带宽的怀疑主要就是基于此demo中的源码进行线上分析测试给到的推测。

框架问题

本部分更加适合腾讯系的兄弟们去阅读,其他非腾讯系技术可以直接跳过。

我司的框架为TarsGo,我们在线上设置handletimeout为1500ms,该参数主要用于控制某

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值