造成后端响应时间高的原因

现象描述:

  不管是性能测试中,还是生产环境中,经常会遇到响应时间过长的问题。 响应时间是性能评估的一个重要指标,会对最终用户产生直接影响,一个产品是快是慢,响应时间是最直观的感受。 因此面对响应时间长的问题,一定想尽办法消灭它。

排查思路及说明

  常见有两种表现:偶现极少量的请求出现响应时间偏长,或者会有大量、批量的请求响应时间长。

对偶然出现的少量响应时间长的问题,可能是外部影响、网络异常等造成。

  偶然出现少量响应时间过长时,可以排查以下几个方面来定位问题:

  查看当时服务器日志是否有错误;

  检查服务器资源使用情况是否正常,load average、CPU使用率(尤其是单核CPU)是否有飙高现象;

  检查是否出现磁盘短暂负载较高,比如iostat util%飙高等;

  确认当时网络情况是否正常,是否有网络丢包(如ping www.baidu.com -t 若有请求超时显示说明有网络丢包)等现象。 以上排查建议在有全面监控的基础上进行,偶现问题比较难定位,有全面的监控数据进行排查就方便多了。

如果出现比较多的响应时间过长,首先要排查所有服务器是否存在资源使用瓶颈,

  如CPU使用率高、单核CPU使用率高、内存使用是否正常、是否有频繁FullGC、磁盘IO压力情况、网路时延情况等。 如果不能通过以上检查发现问题所在,那就要逐步分析是系统架构中哪个环节导致的问题。

模块内部原因造成的响应时间高

  比如:qps过大,下游模块的响应时间高,缓存读写异常,代码问题(可以分析系统架构哪一环节响应时间高,具体分析代码问题)等。 如笔者曾经遇到过因为日志打印太多导致响应时间高的情况

  压力上不去:

  • 模块本身响应时间过高
  • 下游模块响应时间过高
  • 部署机器网卡带宽
  • 部署机器tcp收发缓冲区限制
  • 压力源所在机器带宽

  响应时间异常:

  • 尖峰:对应时间点查询词返回结果过多;下游模块重启等引起
  • 突然下降:缓存命中率过高;词表异常 等引起
  • 居高不下:缓存读写异常;下游收发堵塞等引起

  出core:

  • 空指针
  • 数组越界
  • 相关模块参数解析错误
  • 读取数据与缓存结构不一致
  • 线程安全等

  内存泄漏:

  • 指针数组释放语法错误
  • 分支路径过多,释放指针未覆盖所有分支
  • 扫尾函数未执行
  • 智能指针交叉引用
posted @ 2021-02-01 12:52  justloving  阅读(1002)  评论(0编辑  收藏  举报