问题

今天早上用户反馈网站变得很慢,近期并没有任何程序更新或者配置改动,看样子要好好查一查

抓包

首先发现日志上报请求超时,但是该请求是异步发送且只是上报接口,不涉及前端业务,故没有深入追查。大致看了下其他接口的耗时,发现校验token接口和业务接口耗时比平时要长,这个情况之前也已经出现过几次,基本都是后台的问题,所以想当然也认为情况跟之前差不多。于是,去机房查看后台日志

查日志

查看日志后发现后台接口正常,说明问题不在后台。那么肯定是前端到后台之间的链路那个环节出了问题,最大可能是网络问题或者是云平台的问题,想到这里,我不禁倒吸一口凉气,之前也遇到过这种问题,因为涉及到别的团队,问题排查进展缓慢且巨耗时间。不过转念一想,如果真是这样,其他系统也应该出现异常了,现在看来只有我们系统有问题,还是先排查掉自己的问题再说。

再抓包

于是继续在机房抓包分析。Chrome浏览器有详细统计接口耗时分布,发现校验token的接口和业务接口在stalled阶段耗时占大头,这跟之前的耗时分布不一样,线索应该在这里。

查资料

上网查了下stalled时间段的含义:Time the request spent waiting before it could be sent 看起来像是阻塞了。继续看了几篇博文,出现的原因有以下几个:

  • 网络或者服务端问题导致TCP重连,涉及三次握手。这个可以排除,就没细看,估计是timeout之类的问题
  • Chrome本身的优化导致,大意是说对于相同的请求Chrome会缓存到磁盘,如果相同请求发送过快就有可能阻塞,这个也可以排除
  • 浏览器对同一域名进行请求的最大并发连接数进行限制,这个比较像,Chrome默认是开6个连接,如果前面6个都阻塞住了,后面的请求肯定会wait,这个就会体现在stalled耗时上

分析

logAdd这个接口发送频率大且100%超时,必然会占用连接资源。校验token的接口前端请求很频繁,该接口本身耗时也不小,会加重阻塞。业务接口拿不到连接资源,只能等待,用户就会感觉到页面变慢了。

排查&解决

查看了日志上报后台服务的日志,发现超时的原因是ES写入失败,顺藤摸瓜,登录到ES控制台看看,发现ES有一个节点居然挂了。虽然早就收到了ES告警的短信,但是这个ES属于我们的旁路系统的一部分,而这个旁路系统已经快下线了,所以没重视。很明显,是ES故障导致了日志上报接口超时,于是立即联系运维,尽快恢复。ES恢复之后,系统恢复正常。

总结

总结起来,有几个地方值得注意:

  • 重视告警短信。其实ES告警已经有好几天了,但是前面几天没有影响业务,而且旁路系统又快下线了,就心存侥幸,想着随他去吧,却没想到今天直接影响到了业务。
  • 重视前端接口报错。日志上报接口虽然不是业务接口,报错也应该引起注意
  • token校验接口调用过于频繁,每向后台发一个请求,都要发送一个token校验请求。坑爹的是,token校验请求接口里会进行在线用户统计,统计数据存放在mysql中!!!这真是个糟糕的设计,导致前端请求最频繁的接口成为了耗时最长的接口之一。
  • 不能心存侥幸,任何一个模块都有可能引发连锁反应,只要没有下线,都应该保证正常运行。如果一开始就把精力放在日志上报服务上面,应该很快就能解决问题了。

stalled时间过长引起的一次线上事故相关推荐

  1. 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。

    关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题.涉及tcp连接异常. 参考文章: (1)关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题. ...

  2. chrome Stalled时间过长

    心跳请求getMsg每秒请求一次,所有卡住的请求会突然一下子全通,如下图 好久才发现是浏览器的问题,下图右边为双核浏览器正常. 只有坐席电脑出现这个问题. 参考这篇文章: 关于页面请求发起后,通过F1 ...

  3. 同时设置超时时间_刚入职的小菜鸡,设错了RPC超时,搞了个线上事故

    上面这张监控图,对于服务端的研发同学来说再熟悉不过了.在日常的系统维护中,『服务超时』应该属于监控报警最多的一类问题. 尤其在微服务架构下,一次请求可能要经过一条很长的链路,跨多个服务调用后才能返回结 ...

  4. 记录简单优化系——关于图表请求页面加载缓慢问题的追查(stalled 时间过长)

    问题描述:一个页面中有多个图表,用到的是echarts,angularjs,每一个图表都是一个请求,详细如截图. 发现stalled(阻塞)时间比较长,上网百度可以得到很多解决办法,简单百度查到的如下 ...

  5. 关于请求被挂起页面加载缓慢问题的追查(stalled 时间过长)

    关于请求被挂起页面加载缓慢问题的追查 缘起 有一个Dashboard的页面大约有十几个图表,每一个图表是一个ajax请求. 突然有一天改了页面中间几个图表的查询逻辑,导致ajax请求响应时间比较长. ...

  6. 关于心跳ajax请求pending状态(被挂起),stalled时间过长的问题。涉及tcp连接异常。...

    环境:景安快云服务器(听说很垃圾,但是公司买的,我也刚来),CentOS-6.8-x86_64,Apache,MySQL5.1,PHP5.3. 问题:现公司有一个php系统,需要重复向后台发送ajax ...

  7. 按摩师-总预约时间最长

    一个有名的按摩师会收到源源不断的预约请求,每个预约都可以选择接或不接.在每次预约服务之间要有休息时间,因此她不能接受相邻的预约.给定一个预约请求序列,替按摩师找到最优的预约集合(总预约时间最长),返回 ...

  8. 优化JS加载时间过长的一种思路

    文章版权由作者李晓晖和博客园共有,若转载请于明显处标明出处:http://www.cnblogs.com/naaoveGIS/. 1.背景 去年公司在漳州的一个项目中,现场工程人员反映地图部分出图有点 ...

  9. Systemctl stop XXX 时间太长

    一.背景 假如我们自己开发了一个系统,例如web,想要通过systemd来控制.但使用过程中,出现了问题,systemctl stop XXX 的时间太长了. 二.问题原因 先说结论:我们的系统停止的 ...

最新文章

  1. java初始化一个链表_Java 链表(LinkNode)的简单操作:初始化,遍历,插入,删除等...
  2. Python爬虫项目--爬取某宝男装信息 附带源码
  3. BeanShell 跟jdk js引擎使用记录
  4. linux——文件输入输出管理
  5. java Dated Dateformat Calendar
  6. mysql中存储gis数据类型_mysql 中的数据类型
  7. 【HTTP】POST 与 PUT 方法区别
  8. SAP License:SAP合同类型的使用
  9. Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案
  10. c# oracle异常,C# 连接Oracle数据库异常总结
  11. svn 删除本地和远程仓库上的文件
  12. php与sap系统,sap系统是什么系统
  13. 2018中国软件和信息技术服务综合竞争力百强企业名单
  14. 可用主机ip地址数量的计算
  15. Mac 更新系统后无法使用git
  16. e^x的导数仍为e^x
  17. Sublime Text 3—Project(项目管理)
  18. JAVA画色盲图_一个色盲竟然能画出这么精美的色彩...
  19. 【CTF】buuctf web (四)——通过配置文件构造PHP后门
  20. 切换window窗口

热门文章

  1. 腾讯ui测试机实时预览软件,移动设备中实时预览APP设计效果图的2款国产神器
  2. ubuntu18.04 搭建LDAP服务器
  3. Origin从Excel导入数据后再次打开软件数据消失
  4. 批处理设置计算机不休眠,虚拟机状态下怎样设置电脑不休眠
  5. sublime插件csscomb和autoprefixer安装
  6. 利用SQLCipher加解密数据库(包括加解密已有的数据库)
  7. CSS中绝对定位和相对定位的区别及作用
  8. dataguard mysql_ORACLE 11G 搭建dataguard详细步骤(所有操作总结)
  9. 微信分享自定义:标题、内容、小图标
  10. Vue3+与Vue2共存