接口按照key去redis中相关的数据的时候,接口socket返回超时
导致超时的可能原因比较多:就目前碰到的问题来说,可以按照以下顺序定位:
<1> 业务服务器负载问题
这个一般可以先看sentry解决,重点看:cpu、内存使用率、网卡流量、tcp重传、其他你觉得异常的指标、
不同机器ip的负载是否均衡等,排除了这个因素,继续往下看;
<2>业务线程中有明显的链接处理问题:
a.拿到连接后,去处理其他逻辑了,并没有去拿数据;
b.拿到链接,处理完一次逻辑后,链接不归还,导致后续的线程在死等链接(通常是使用pipeline的同学要注意);
c.链接初始化参数不合理,导致链接调度耗费时间比较多;
正规的api调用方式在接入文档已经详细介绍,请对比定位;
<3>网络抖动
通常是业务逻辑代码没动,部署没有变更的情况下突然出现这种情况,很可能是网络抖动引起的。
这种情况,请先看服务器监控(虽然不一定准,因为senytry采集数据是有周期的,而网络抖动都是瞬时的)。
这种情况不好定位,原因是:
a.事过境迁,抖一下就好了,监控采集不到数据,无法反应网络变化;
b.如果有其他使用业务方也抖了(抖不抖这种感知是根据你设置的timeout来的,如果有个业务方timeout比较大,抖一下它的业务并不一定感知的出来)。
如果只有你的业务抖了,别的业务没抖,很难有参照。通常的经验是网络抖一下肯定是在某条链路上的,
这条链路上的机器不一定是谁的,有的业务能感知到,有的业务不能感知到,这就让一次网络抖动很难变成一个共性问题,
也很难推动网络的同学去定位,我也拿不出证据证明是谁的问题;