博客

  • 压力测试模板

    压力测试模板

    XXX系统性能压测报告

    • 压测时间:2022-07-14
    • 压测说明:本次压力测试主要是为了找出系统瓶颈

    压测对象

    XXX系统

    环境

    版本信息

    类别 说明
    服务器 192.168.1.1
    数据库 MYSQL-8.0.21
    服务容器 TOMCAT-9.0.63
    Redis 6.2.6
    RabbitMQ 3.9.14
    JDK openjdk version “1.8.0-262” (build 1.8.0-262-b10) 64-Bit

    硬件信息

    类别 说明
    服务器CPU Intel(R) Xeon(R) CPU E5-2673 v3 @ 2.40GHz 12核心24线程
    硬盘 Lenovo SSD SL700,型号LSL70240B0CFF03998,240GB
    内存 64GB,Free=6.6GB,Used=41.7GB
    交换区 15GB

    服务调用链路

    链路 是否命中DB 理论DB次数 缓存生效后DB命中次数 性能/评估
    A -> redis
    A -> redis -> B -> mysql yes 1
    A -> C -> B,mysql yes 3 3 根据设备数量指数影响
    A -> redis -> G yes 1
    A -> redis -> S yes 3 缓存更新不及时
    A -> redis -> B yes 少数 少数 较少影响

    调优参数

    Tomcat

    类别 参数
    Tomcat 等待队列长度 2000
    Tomcat 最大线程 800
    Tomcat 最小线程 100

    Hikari

    类别 参数
    Hikari 连接 30s
    Hikari 超时 30s
    Hikari 线程 30
    Hikari 连接时长 1765000ms

    Jedis-Pool

    类别 参数
    jedis-pool max-active 100
    jedis-pool max-wait 5000
    jedis-pool max-idle 5
    jedis-pool min-idle 1

    Hystrix

    类别 参数
    Hystrix 策略 信号量
    Hystrix 最大信号量 8000

    Feign

    类别 参数
    Feign 懒加载 开启
    Feign 熔断 开启
    Feign 压缩算法 开启
    Feign 默认连接时间 30000
    Feign 默认超时时间 50000

    Ribbon

    类别 参数
    Ribbon 最大重试次数 0
    Ribbon 重试 关闭
    Ribbon 请求连接时间 10000
    Ribbon 超时时间 10000

    服务内存分配

    类别 参数
    A 2GB
    B 2.5GB
    C 1.5GB
    G 256MB
    S 256MB

    压测数据|服务器基准测试

    • 本次测试,对服务器进行基准测试,以基础服务的三个接口分别进行衡量
    • 测试工程:test-project
    • Git: https://gitlab
    • apache-jmeter-5.4.1
    • Linux version 3.10.0-957.el7.x86_64 version 4.8.5 20150623 (Red Hat 4.8.5-36)

    服务器标准压力测试

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大
    /test/get http get 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) 500 7830236 88872.9/s 5 0 1011
    /test/get http get 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) 500 11676855 83440.1/s 5 0 1016
    /test/get http get 192.168.4.164:8081(nacos+common+kit+mysql+redis+stream) 500 93893364 84221.5/s 5 0 1054

    Redis|set + get

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大
    /test/redisGet http post 192.168.4.164 100 2784253 40935.3/s 2 0 942
    /test/redisGet http post 192.168.4.164 500 757883 10451.1/s 47 0 1227
    /test/redisGet http post 192.168.4.164 1000 300363 3241.0/s 308 1 1931

    MYSQL写入1次DB

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大
    /test/dbWrite http post 192.168.4.164 100 195939 3826.3/s 25 4 1281
    /test/dbWrite http post 192.168.4.164 500 267124 3253.9/s 151 5 1084
    /test/dbWrite http post 192.168.4.164 1000 91968 1255.9/s 788 5 3145

    MYSQL查询1次DB

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大
    /test/dbGet http post 192.168.4.164 100 774145 12785.9/s 7 0 468
    /test/dbGet http post 192.168.4.164 500 542922 5130.9/s 97 1 2966
    /test/dbGet http post 192.168.4.164 1000 149840 1500.1/s 657 1 11066

    压测数据|本次主要对象

    • 测试工程:test-project
    • apache-jmeter-5.4.1
    • Linux version 3.10.0-957.el7.x86_64 version 4.8.5 20150623 (Red Hat 4.8.5-36)

    登录接口

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大 错误率
    /token/user/login http post 192.168.4.164 100 11019 80.5/s 1225 394 7586 0.15%
    /token/user/login http post 192.168.4.164 500 10241 82.1/s 5857 476 15020 2.79%
    /token/user/login http post 192.168.4.164 1000 10405 85.0/s 11059 299 15382 44.15%

    验证码接口

    接口 协议 方法 主机 线程数 总样本 吞吐量 响应时间-均值 响应时间-最小 响应时间-最大 错误率
    /token/user/check http post 192.168.4.164 100 27220 242.7/s 406 80 1097 0%
    /token/user/check http post 192.168.4.164 500 10241 225.8/ 2180 220 8964 0%
    /token/user/check http post 192.168.4.164 1000 22882 155.9/s 6231 54 15364 10.91%

    建议与优化

    影响因子

    • Redis:
      max-idle阈值为120-360较为合理
      max-idle数量越大,占用内存越高
      max-idle参数增大,吞吐量变高,但过大的配置,吞吐量适得其反
      默认服务256M较难支持360个idle及以上配置(360个idle大约500M)
    • AOP组件
      影响约10%左右的吞吐量
    • 组件@SpringBootApplication(scanBasePackages = “com.test”)
      影响严重,40%-70%不等
    • 接口返回值
      返回值数据量越大,性能指数下降
    • 接口请求参数
      较为合理范围内的数据量会有略微的影响
    • HTTP与HTTPS
      服务链路全采用HTTPS会有一定的性能影响,https的ECC比RSA更快