某天测试人员报任务单提单时经常提单失败,查看日志报接口超时(duration超过60秒了):
自已apiFox调用接口进行测试:发现基本6~7次调用就有一次超时,查看服务器日志,接口处理时间是正常的,都是毫秒级:
查看NG的access.log日志:发现超时那次的记录从点击apifox调用到access.log日志记录隔了一分钟:
判断:要么由因为网络问题导致,apifox调用到ng这段链路超时,要么时NG调用进行转发调用其他服务器超时。 查看NG配置:
发现NG代理转发的upstream地址组刚好有7个地址,符合基本6~7次调用就有一次超时的情况。
telnet对应的一个IP+端口:发现有一个超时:
将这个超时的IP+端口删除重启NG就好了。
注:NG机制:NG进行反向代理时,代理指向upstream地址组,若upstream地址组中的一个地址超时,会将当前upstream地址组中的另一地址。所以超过60秒也有数据返回,因为NG将该请求转到其他地址了。
反思:要提升自已从网关+NG+应用服务+数据库的全链路问题排查能力,排查问题时,要进行全链路的 思考;尤其是这种接口多次调用其中一次失败,其余成功的情况,一般都是网络问题