• 一次redis连接池连接数配置过少引起的性能问题


    背景:一个接口,本身有一定的逻辑,但是不复杂,主要是处理数据,不涉及到数据库操作,但是内部调用两个接口。基本逻辑是先调用BI的一个接口获取到基础数据,在本地处理完数据在根据classid去业务系统查班级,查完的数据在本地处理,返回结果。其中业务系统的接口是老接口,不会存在性能问题,BI的接口是我先压测的,也没性能问题,而本地并无复杂操作,所以接口理论上是不会有性能问题的,但压测的结果却很慢。

    压测过程中查看了可以看的地方,没看到异常(其实有,当时没看到),而且涉及到三个系统,没头绪的话查起来会很浪费时间,于是找开发把主要逻辑加上了时间戳。

    结果如下,这是grep出时间最长的。

    代码如下,主要都是redis的操作,进去看逻辑。

    逻辑:

     

    不一一看了,这个方法里面主要是对redis的操作,涉及到4个get和4个set,redis的性能是非常好的,之前测试一个4C的服务器,tps轻松上万,单个get或者set只有几毫秒。所以说这里不应该这么慢。看上面的时间都已经几百多毫秒。所以要看下redis的问题,找到redis配置,如下,这是spring boot 对redis连接池的配置,而且开发应该用的默认配置,明显很小,改大之后再测试。

    结果如下,时间明显少了很多,服务器CPU也已经上去,tps由一百多到达了四百多。问题确定。

    回过头来再看这个问题,可以明显的感觉到做性能测会代码的重要性,很多问题,在代码层很容易定位,至少很容易缩小范围。

    再来看看不用代码怎么定位问题。下面这段是我打印的两次线程信息,1.txt是第一次,2.txt是第二次的线程信息,明显看到第一次中waiting有136个线程,而第二个只有61个

    查看具体线程信息,明显可以看出来是在等待redis线程池。

    再看下这个对比,就更明显了。第二次已经没有等待redis连接池的线程了。

  • 相关阅读:
    1.在虚拟机中安装Linux中的CentOS7系统
    Mysql的跨服务器 关联查询--Federated引擎
    mysql 时间格式转换
    mysql 查询当天、本周,本月,上一个月的数据
    mybatis执行批量更新数据
    JSTL 递增序号
    mybaits 新增数据返回id
    第一部分软件测试综述——软件测试背景【软件测试】(美)Ron Patton中文电子版
    测试真的是一个无聊又没前途的岗位吗?是吗?不是吗?
    碎片化时间,偷偷变牛逼!2020全栈软件测试工程师修炼手册
  • 原文地址:https://www.cnblogs.com/huantianxing/p/8632890.html
Copyright © 2020-2023  润新知