评论

一次小程序 wx.request 请求超时排查

一次request:fail timeout的Debug过程

现象: 小程序使用wx.request访问接口时候遇到请求被取消,request:fail timeout的情况,但其他接口又正常。

初步判断是这个接口本身的问题。因为就这个接口有问题。

查 nginx 日志,客户端请求的时候并没有看到对应的ng访问日志,看起来好像客户端根本没有连接到ng。但在客户端cancel连接的时候,服务端出现了一个http状态499的日志记录。说明实际客户端和服务端实际是有连接的。只是客户端主动断开连接了。

判断是客户端超时主动断开。调整小程序超时参数,原先10秒,现在设成120秒。想看看是不是真的是执行时间很多长。
重试接口,果然此时接口过了很长时间返回了状态200。说明接口正常工作,就是执行时间很长。然后原先配置的超时时间比较小,导致小程序主动关闭了连接。关闭连接的时候小程序报了request:fail timeout,nginx在这个时候就报了499错误。

我们用的框架是 Yii2,此时去看框架的debug日志,发现数据库执行的时间长达30秒。看具体执行的sql情况。发现两个sql问题。

一个sql未加索引,一个行锁等待时间过长。
第一个问题调整索引就可以解决。
第二个问题判断是其他程序把数据锁住了。查代码发现有一个定时程序会反复频繁对数据加锁,优化这个定时程序逻辑,降低行锁次数。

然后问题解决。
再把小程序超时时间恢复,完成。

点赞 5
收藏
评论
登录 后发表内容