我们在调用GET请求获取数据的接口中,由于接口的处理逻辑复杂、查询的数据库表过多、nginx设置的超时时间过短和慢sql等原因,会造成接口请求了20秒左右,都没有结果返回,浏览器就会报错504 Gateway Time-out ,报错如下: 遇到这个问题,可能会有两种情况,一种是网上常说的nginx访问超时时间。
设置Nginx超时时间
nginx访问出现504 Gateway Time-out,一般是由于程序执行时间过长导致响应超时,例如程序需要执行90秒,而nginx最大响应等待时间为30秒,这样就会出现超时,这种情况可以将nginx的超时时间调大。
但是这种情况不是最终理想的解决办法,接口请求时间超过20秒,那么接口的性能本身就不够合格,因此我们更需要从代码层面来改善我们的响应时间。
添加日志快速定位
接口响应超时,我们最急迫想知道的是接口的哪个模块出了问题,可以使用日志快速定位超时代码的位置,也就是在方法的不同模块,加上对应的日志输出,日志必须附带打印时间,然后将代码打包到生产环境,在生产环境中请求
接口,日志就会记录下来,我们根据方法中不同模块的执行时间,来判断哪个模块执行时间过长,然后就可以针对这个模块进行优化,比如查看是否存在慢sql、是否嵌套轮询和是否死循环等,找到问题后进行相应的优化。
|