基于Jmeter的web系统后端接口压测报告

2024-06-08 18:58

本文主要是介绍基于Jmeter的web系统后端接口压测报告,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

      • 一、测试目的
      • 二、测试内容
      • 三、测试环境
      • 四、测试方法
        • 4.1、压测工具和指标
        • 4.2、测试时间
        • 五、统计指标
      • 六、测试结果
        • 6.1、第一轮压测
          • 6.1.1、聚合报告
          • 6.1.2、接口压测实况图(90并发)
          • 6.1.3、第一轮压测分析
        • 6.2、第二轮压测
          • 6.2.1、聚合报告
          • 6.2.2、接口压测实况图(90并发)
          • 6.2.3、第二轮压测分析
        • 6.3、第三轮压测
          • 6.3.1、聚合报告
          • 6.3.2、接口压测实况图(30并发)
          • 6.3.3、第三轮压测分析
      • 七、结论


一、测试目的

针对uat环境的用户并发量和系统瓶颈,都是未知的。
本轮压力测试,抽取部分代表性查询接口,主要是为了测试后台系统UAT环境主要接口吞吐量和响应时间,初步找出系统的瓶颈。

二、测试内容

压测接口清单

  • api/nonmetalPla/list(pla(post))
  • api/warehouse/searchCarType (查询基础数据(post) )
  • api/dict/findDictByParentCode (根据父类编码查询下级字典(post) )
  • 压测数据库查询m_dict数据 (jdbc连接 )

三、测试环境

环境机器型号CPU操作系统内存磁盘
应用服务器linux虚拟机CPUIntel® Xeon® Gold 6132 CPU @ 2.60GHz
4个单核四线程
CentOS Linux release 7.5.1804 (Core) 单机total:8G ,可用内存: free+buffers/cached = 2.3Gtatal:26G used:15G
压测机器宏碁4750单个双核四线程win10 单机8Gtotal:8G used:3G

四、测试方法

4.1、压测工具和指标
类别说明
压测工具apache-jmeter-5.1.1(单台win环境)
压测性能相关参数协议: http
方法: get/post
并发数 、总请求数、吞吐率(TPS)、响应时间、错误率
4.2、测试时间

第一轮压测:
测试时间:9:00-12:00(工作时间) ,内网环境压测(VPN内网,非完全内网
针对每个接口分别执行并发数10、30、90、270并发数执行120秒
第二轮压测:
测试时间:7:50-09:30(工作时间) ,内网环境压测(VPN内网,非完全内网
针对每个接口分别执行并发数10、30、90、270并发数执行120秒
第三轮压测:
测试时间:09:00-09:30(工作时间) ,内网环境压测(VPN内网,非完全内网
针对pla接口30并发数执行120秒

五、统计指标

进行压力测试,并对产生的每秒TPS,响应时间(min,ave,max)及错误率进行统计

六、测试结果

6.1、第一轮压测

时间:9:00-12:00(工作时间)

6.1.1、聚合报告
接口名称数据量并发数持续时间samplesaverageminmaxmedian90%Line95%Line99%Lineerror%tps(s)received(kb/s)sent(kb/s)
pla(post)limit 10120s
api/nonmetalPla/list105113233732458191345408827042.419214341672.4520921.91383241
api/nonmetalPla/list3053236731468692543119615612619043.967753131733.50595422.71380996
api/nonmetalPla/list9062241737161264471262323844458283049.349825561945.70362125.49419699
api/nonmetalPla/list270758642981554429033597611944515606059.222133752334.93672430.59424683
查询基础数据(post)limit 10
/api/warehouse/searchCarType10260245911334583936929371496021.52743881078.60036611.28929163
/api/warehouse/searchCarType3044568051057980670136917122686036.96943551852.29868919.38729186
/api/warehouse/searchCarType9050442150172118221781344142776622041.0926542058.88643221.54956562
/api/warehouse/searchCarType2706504502215479084399781001022217749051.14373562562.48095626.82049416
根据父类编码查询下级字典(post)limit 10
/api/dict/findDictByParentCode10652184222512681150526175084654205.2016434643.6823133782.722735251
/api/dict/findDictByParentCode3019421861267114471489346748966968015.5833734610.104843728.156922043
/api/dict/findDictByParentCode9054641986284232151604284052196941043.7266921728.9746886222.88819043
/api/dict/findDictByParentCode270169311921721463215053356502165971.07131.626841188.6504563268.13092412
jdbc连接limit 10
压测数据库查询m_dict数据1017390661013343401161793120145.2145.460
压测数据库查询m_dict数据30189091811081651183514748450157.5157.780
压测数据库查询m_dict数据901505270913120105381106156666480.48125.1124.780
压测数据库查询m_dict数据270193911681131084815172593323277070158.1647635158.470
6.1.2、接口压测实况图(90并发)

下面抽取并发量为90的情况下各个测试接口的资源情况,分别是内存和cpu状况图、响应时间、tps
在这里插入图片描述
在这里插入图片描述

一、api/nonmetalPla/list((post))

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、/api/warehouse/searchCarType (查询基础数据(post) )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、/ api/dict/findDictByParentCode (根据父类编码查询下级字典(post) )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四、压测数据库查询m_dict数据 (jdbc连接 )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.1.3、第一轮压测分析
  • 带宽、内存、内存、磁盘等指标在网页查看一直表现的比较正常,在命令行直接进去服务器查看,cpu有超过100%的几次状况。
  • 并发数在90以内时,接口响应时间基本能保证在2s内
  • 普通数据库查询接口tps有提升空间,pla接口在10-270的并发下均能保持40tps以上
  • warehouse查询(post) 接口相比pla接口仍较慢,可做进一步优化,考虑字段过多,sql查询方面的问题
  • 根据父类编码查询下级字典(post)接口耗时非常严重,需要比较优先优化,考虑索引和sql方面的问题
  • 数据库压测tps只有120-150左右,需要进一步提高,考虑服务器性能方面和mysql配置问题,在非工作时间有尝试压测
  • 对于接口耗时较长的情况,目前引入了redis,但是目前用的地方很少,redis几乎闲置,接口可以考虑结合使用redis

一次压测数据不一定是准确的,有主要以下几点

  • 服务器网络变化
  • 服务器性能改变
  • 压测主机网络变化
  • DB数据量的变化
  • 压测过程中部分请求 error / 超时影响
6.2、第二轮压测

压测时间:07:50-9:30(工作时间)

6.2.1、聚合报告
接口名称数据量并发数持续时间samplesaverageminmaxmedian90%Line95%Line99%Lineerror%tps(s)received(kb/s)sent(kb/s)
pla(post)limit 10120s
api/nonmetalPla/list10TOTAL4038296959299233496630934033.498419651330.28636217.30533593
api/nonmetalPla/list30TOTAL513469876788260292111073601042.688351751695.23615622.05286921
api/nonmetalPla/list90TOTAL58301873157125181717229335155551047.524720191887.29760424.55134471
api/nonmetalPla/list270TOTAL51306483459265155727101251191116345040.13236641593.73308620.73244319
basedata(post)limit 10
/api/warehouse/searchCarType10TOTAL427245194178984266156768530.00234082422.095446952040.37272211.56003959
/api/warehouse/searchCarType30TOTAL3028118618744921120158618072567025.128839242325.84094313.17791667
/api/warehouse/searchCarType90TOTAL21465096264379613563106781495024020016.605280261536.9289588.708042481
/api/warehouse/searchCarType270TOTAL2916117792575532010512170292001827637021.096496941952.62088611.06329966
根据父类编码查询下级字典(post)limit 10
/api/dict/findDictByParentCode10TOTAL31344371932562837562450261.1586499392.5030881136.7002308
/api/dict/findDictByParentCode30TOTAL693395121712042581322150577.6083969868.1048074302.3418952
/api/dict/findDictByParentCode90TOTAL873351222214538942192745000727.28862541093.063666380.6901398
/api/dict/findDictByParentCode270TOTAL9465533922612529645149613310786.7134321182.374973411.7953121
jdbc连接limit 10
压测数据库查询m_dict数据10查询4365324945491830441390363.6689299364.37922080
压测数据库查询m_dict数据30查询190691872022843833415219810158.7694101159.07950660
压测数据库查询m_dict数据90查询3177433310944823157680518140264.096682264.61249580
压测数据库查询m_dict数据270查询27057119626156329022004239845200222.8252366223.26044210
6.2.2、接口压测实况图(90并发)

下面抽取并发量为90的情况下各个测试接口的资源情况,分别是内存和cpu状况图、响应时间、tps
在这里插入图片描述
在这里插入图片描述
一、api/nonmetalPla/list((post))
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、/api/warehouse/searchCarType (查询基础数据(post) )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、/ api/dict/findDictByParentCode (根据父类编码查询下级字典(post) )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
四、压测数据库查询m_dict数据 (jdbc连接 )
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.2.3、第二轮压测分析
  • 二轮压测发现pla接口和warehouse接口都是比较相近的tps结果数据,
  • 数据字典接口翻了将近10倍,其数据也是不多的,但是结果差别如此的大。
  • 压测数据库查询tps也翻了一倍,
    根据以上几个现象,首先能确定的是虽然内网环境,但是走vpn的情况下,网络存在不稳定,当前数据库仅该后台系统在使用,说明数据传输的耗时主要受网络方面的影响大。
    结合第一轮压测出现的一些问题,两轮下来,需要第三轮的测试,
    第三轮主要是判断数据量大小的网络传输,是否明细影响压测结果
6.3、第三轮压测
6.3.1、聚合报告
接口名称数据量并发数持续时间samplesaverageminmaxmedian90%Line95%Line99%Lineerror%tps(s)received(kb/s)sent(kb/s)
pla(post)
api/nonmetalPla/list1030120s5207689745609608105413562167043.31717.9122.35
api/nonmetalPla/list130120s1740820548570711331747221200144.8629.974.65
api/nonmetalPla/list030120s47035752421001521201873210391.8171.41208.88

在这里插入图片描述

6.3.2、接口压测实况图(30并发)

下面抽取并发量为30压测的情况下各个测试接口的资源情况,分别是内存和cpu状况图、响应时间、tps
压测接口:api/nonmetalPla/list((post)
并发量:30
在这里插入图片描述
在这里插入图片描述

一、查询0条
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
二、查询1条
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
三、查询10条
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6.3.3、第三轮压测分析
  • 数据量大小的网络传输影响非常大
  • 数据量越小传输越快,当前VPN的内网受VPN或内网网速影响较大
  • 接口的数据量有必要缩减,会有明细的tps提升

七、结论

结合压测一、二、三分析,得到以下一些结论和建议:

  • 主要问题在网络环境,网络的提升对压测tps的影响非常大。

  • 工作时间的早上刚上班期间,服务器和带宽都是比较宽裕的状况,这几个目标接口的压测结果tps都提高了很多,vpn连接的内网压测对数据的准确性仍然有一定的影响

  • 在网络正常的情况下,接口tps仍然只能在50左右。

  • 服务器性能不是非常稳定,虚拟linux多个地方共用主机导致有波动,也影响接口性能,单独部署到一台服务器会事比较好的选择

  • 数据库压测tps120-150,200+均出现,从二轮压测可以看出,除了网络之外,数据库tps仍可以继续提高,本地机器能达到1000tps,可以向着这个目标接近。

  • 所有接口不需要的字段尽量缩减不返回到前端,可做进一步优化,考虑字段过多,sql查询方面的问题

  • 对于接口耗时较长的情况,目前引入了redis,但是目前用的地方很少,redis几乎闲置,接口可以考虑结合使用redis

  • 考虑下一轮的压测中直接在机房另一台linux/win下专门压测,并使用命令行方式直接导出报告的方式节省工作量

这篇关于基于Jmeter的web系统后端接口压测报告的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1043033

相关文章

Linux系统中查询JDK安装目录的几种常用方法

《Linux系统中查询JDK安装目录的几种常用方法》:本文主要介绍Linux系统中查询JDK安装目录的几种常用方法,方法分别是通过update-alternatives、Java命令、环境变量及目... 目录方法 1:通过update-alternatives查询(推荐)方法 2:检查所有已安装的 JDK方

Linux系统之lvcreate命令使用解读

《Linux系统之lvcreate命令使用解读》lvcreate是LVM中创建逻辑卷的核心命令,支持线性、条带化、RAID、镜像、快照、瘦池和缓存池等多种类型,实现灵活存储资源管理,需注意空间分配、R... 目录lvcreate命令详解一、命令概述二、语法格式三、核心功能四、选项详解五、使用示例1. 创建逻

Python Web框架Flask、Streamlit、FastAPI示例详解

《PythonWeb框架Flask、Streamlit、FastAPI示例详解》本文对比分析了Flask、Streamlit和FastAPI三大PythonWeb框架:Flask轻量灵活适合传统应用... 目录概述Flask详解Flask简介安装和基础配置核心概念路由和视图模板系统数据库集成实际示例Stre

使用Python构建一个高效的日志处理系统

《使用Python构建一个高效的日志处理系统》这篇文章主要为大家详细讲解了如何使用Python开发一个专业的日志分析工具,能够自动化处理、分析和可视化各类日志文件,大幅提升运维效率,需要的可以了解下... 目录环境准备工具功能概述完整代码实现代码深度解析1. 类设计与初始化2. 日志解析核心逻辑3. 文件处

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序

Linux系统性能检测命令详解

《Linux系统性能检测命令详解》本文介绍了Linux系统常用的监控命令(如top、vmstat、iostat、htop等)及其参数功能,涵盖进程状态、内存使用、磁盘I/O、系统负载等多维度资源监控,... 目录toppsuptimevmstatIOStatiotopslabtophtopdstatnmon

如何使用Maven创建web目录结构

《如何使用Maven创建web目录结构》:本文主要介绍如何使用Maven创建web目录结构的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录创建web工程第一步第二步第三步第四步第五步第六步第七步总结创建web工程第一步js通过Maven骨架创pytho

Java Web实现类似Excel表格锁定功能实战教程

《JavaWeb实现类似Excel表格锁定功能实战教程》本文将详细介绍通过创建特定div元素并利用CSS布局和JavaScript事件监听来实现类似Excel的锁定行和列效果的方法,感兴趣的朋友跟随... 目录1. 模拟Excel表格锁定功能2. 创建3个div元素实现表格锁定2.1 div元素布局设计2.

linux重启命令有哪些? 7个实用的Linux系统重启命令汇总

《linux重启命令有哪些?7个实用的Linux系统重启命令汇总》Linux系统提供了多种重启命令,常用的包括shutdown-r、reboot、init6等,不同命令适用于不同场景,本文将详细... 在管理和维护 linux 服务器时,完成系统更新、故障排查或日常维护后,重启系统往往是必不可少的步骤。本文

如何使用Haporxy搭建Web群集

《如何使用Haporxy搭建Web群集》Haproxy是目前比较流行的一种群集调度工具,同类群集调度工具有很多如LVS和Nginx,本案例介绍使用Haproxy及Nginx搭建一套Web群集,感兴趣的... 目录一、案例分析1.案例概述2.案例前置知识点2.1 HTTP请求2.2 负载均衡常用调度算法 2.