美文网首页
服务页面卡,接口长时间无响应出错

服务页面卡,接口长时间无响应出错

作者: 睁眼看自己 | 来源:发表于2018-07-17 16:51 被阅读0次

问题:我们的服务突然之间页面打开很卡,接口长时间无响应,最终返回500 internal error,还有一个错误信息提示跨域。

背景:随着Data Factory的推广,越来越多的小伙伴开始使用、接入我们的服务。

事发突然也不突然,在正式推广会前我要确保我们的功能可用,不至于当场打脸。好嘛,这时候发现页面打开有点卡,不过当时不以为然,完全没放心上。着急验证我们的各业务模块功能可用,这时候发现请求长时间无响应。

错误第一点:页面打开很卡,却未引起任何警觉。

以下是发现服务请求长时间无响应,依次想到的、做过的排查,有很多问题,也有很多疏忽。

前端控制台展示的错误信息:500 (INTERNAL SERVER ERROR)    No 'Access-Control-Allow-Origin' header is present on the requested resource

第一步:拉仓库最新master代码,本地起服务,调试看详细错误信息。

结论:本地起服务页面打开正常,接口请求都正常返回结果。所以我认定这个500的internal server error其实是不存在的,就是跨域的问题。

第二步:跨域的问题我不擅长,打算找前端搞定,仔细读了错误提示,明确说因为500 internal server error 导致,还是找前端确认了下,前端也同意确实是接口出错导致的错误。

结论:我和前端确认是由于后端服务报错导致的,跟跨域没关系。

第三步:此时我就很困惑了,明明接口都没问题,同一份代码本地起服务一切正常。为何会有这种后端服务报错?本地看不到报错,那我就去服务器上看报错吧

结论:查看服务器端log信息。

第四步:登录服务器,找到对应log文件。页面发起请求,服务器上实时看log。此时发现我们业务中有一步接口302重定向的时候有问题,这个请求一直没有返回,我们的代码中对请求返回的status_code校验是否200,如果通过才会再进行下一步。此时一直重定向这里一直无返回报错。

结论:请求长时间无响应出错了,log只有assert校验出错,并没有其他内容可看。

第五步:以为是我们请求的服务器响应慢,在请求返回前就校验失败,所以我在代码中调大了sleep的时间,可是发现请求仍然是一直没有返回,直到返回500之后,才会同一时间进来N多请求,在这些请求里我清楚的看到了302的正确返回,我开始有点怀疑,我试着把sleep时间调回去发现也是一样,就是说我们的请求一直是阻塞的,这个没处理完其他请求都处理不了,一旦出错,立马其他请求都瞬间处理起来了。

结论:发现我们的服务处理是单进程阻塞的,所以一直拿不到302重定向的返回。

第六步:此时我才想起来去看一眼我们的服务进程情况,ps一下,真的如我所猜测的就只有一个进程。我们是flask的服务,原先是单进程阻塞的,后面使用tornado并发起50个进程解决了此问题,现在为何失效了?翻了下仓库中的代码发现服务启动的进程数被改成1了。。。

此时有个问题:为什么本地起服务运行的时候302没问题?因为我本地起服务的时候,是我本地的机器发请求到我们的服务器做处理返回给我。可是在服务器上跑的时候其实是自己发请求自己处理,再返回,单进程的服务根本搞不来。

后话:因为我们的服务属于测试工具,用的人少无需考虑并发,并且我们的服务启动时开了50个进程,所以打开页面不应出现卡的情况。我在最一开始就应该有所警觉的。

我勒个去。。。虽然小伙伴是误改的,但是我陷入了思考。

权限放开是为了大家更高效,但是真的需要如此open吗?merge master由专人负责是否会更合适?

我个人觉得是有必要专人负责的,不过专人的职责在与检查代码有无改动公共模块,以及改动的有无问题。

相关文章

  • 服务页面卡,接口长时间无响应出错

    问题:我们的服务突然之间页面打开很卡,接口长时间无响应,最终返回500 internal error,还有一个错误...

  • V8内存

    为什么要关注内存 “页面无响应”内存占太多,太卡 防止页面占用内存过大,引起客户端卡顿,甚至无响应; Node使用...

  • 懒加载、预加载、

    懒加载是什么: 能防止页面一次性向服务器响应大量请求导致服务器响应慢,页面卡顿或崩溃等问题是提到前端性能优化中图片...

  • 接口测试-接口调不通

    测试中发现接口调不通,该如何去排查? 1.接口没有任何响应。接口无返回,比如浏览器一直转圈,返回一个空白页面 1...

  • iOS之如何利用 RunLoop 原理去监控卡顿?

    前言 卡顿问题,就是在主线程上无法响应用户交互的问题。如果一个 App 时不时地就给你卡一下,有 时还长时间无响应...

  • 十分钟检查Linux服务器性能

    你是否遇到过:服务器负载飙升;服务被已经挂起,接口长时间没响应;服务刚重启,过一会又无法访问等等。这时下面这几条命...

  • 五、ANR产生的原因及其定位分析

    ANR 全称Application Not Responding(应用程序无响应),一般页面卡顿时间超过(一般是5...

  • Windows cmd 长时间无操作失去响应

    问题:Windows cmd 长时间无操作失去响应 在windows server 上面运行的服务器程序,经常会遇...

  • 08_Ajax&Json

    异步请求 无刷新获取服务器资源。特点: js发送异步请求,服务器响应返回的数据给到js,js操作dom更新页面 无...

  • 懒加载的模块化实现

    问题背景: 有时打开一个页面,要很长时间页面才能响应,这是因为通常对于页面响应的JS,需要等待页面的元素上全部加载...

网友评论

      本文标题:服务页面卡,接口长时间无响应出错

      本文链接:https://www.haomeiwen.com/subject/wxdgpftx.html