基于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系统中通过Xshell和Xftp工具连接与传输文件,然后进行JDK的安装与卸载,安装步骤包括连接Linux、传输JDK安装包... 目录1、卸载1.1 linux删除自带的JDK1.2 Linux上卸载自己安装的JDK2、安装2.1

JSON Web Token在登陆中的使用过程

《JSONWebToken在登陆中的使用过程》:本文主要介绍JSONWebToken在登陆中的使用过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录JWT 介绍微服务架构中的 JWT 使用结合微服务网关的 JWT 验证1. 用户登录,生成 JWT2. 自定义过滤

go中空接口的具体使用

《go中空接口的具体使用》空接口是一种特殊的接口类型,它不包含任何方法,本文主要介绍了go中空接口的具体使用,具有一定的参考价值,感兴趣的可以了解一下... 目录接口-空接口1. 什么是空接口?2. 如何使用空接口?第一,第二,第三,3. 空接口几个要注意的坑坑1:坑2:坑3:接口-空接口1. 什么是空接

一文教你如何将maven项目转成web项目

《一文教你如何将maven项目转成web项目》在软件开发过程中,有时我们需要将一个普通的Maven项目转换为Web项目,以便能够部署到Web容器中运行,本文将详细介绍如何通过简单的步骤完成这一转换过程... 目录准备工作步骤一:修改​​pom.XML​​1.1 添加​​packaging​​标签1.2 添加

Linux系统之主机网络配置方式

《Linux系统之主机网络配置方式》:本文主要介绍Linux系统之主机网络配置方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、查看主机的网络参数1、查看主机名2、查看IP地址3、查看网关4、查看DNS二、配置网卡1、修改网卡配置文件2、nmcli工具【通用

Linux系统之dns域名解析全过程

《Linux系统之dns域名解析全过程》:本文主要介绍Linux系统之dns域名解析全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、dns域名解析介绍1、DNS核心概念1.1 区域 zone1.2 记录 record二、DNS服务的配置1、正向解析的配置

Linux系统中配置静态IP地址的详细步骤

《Linux系统中配置静态IP地址的详细步骤》本文详细介绍了在Linux系统中配置静态IP地址的五个步骤,包括打开终端、编辑网络配置文件、配置IP地址、保存并重启网络服务,这对于系统管理员和新手都极具... 目录步骤一:打开终端步骤二:编辑网络配置文件步骤三:配置静态IP地址步骤四:保存并关闭文件步骤五:重

Windows系统下如何查找JDK的安装路径

《Windows系统下如何查找JDK的安装路径》:本文主要介绍Windows系统下如何查找JDK的安装路径,文中介绍了三种方法,分别是通过命令行检查、使用verbose选项查找jre目录、以及查看... 目录一、确认是否安装了JDK二、查找路径三、另外一种方式如果很久之前安装了JDK,或者在别人的电脑上,想

如何用java对接微信小程序下单后的发货接口

《如何用java对接微信小程序下单后的发货接口》:本文主要介绍在微信小程序后台实现发货通知的步骤,包括获取Access_token、使用RestTemplate调用发货接口、处理AccessTok... 目录配置参数 调用代码获取Access_token调用发货的接口类注意点总结配置参数 首先需要获取Ac

讯飞webapi语音识别接口调用示例代码(python)

《讯飞webapi语音识别接口调用示例代码(python)》:本文主要介绍如何使用Python3调用讯飞WebAPI语音识别接口,重点解决了在处理语音识别结果时判断是否为最后一帧的问题,通过运行代... 目录前言一、环境二、引入库三、代码实例四、运行结果五、总结前言基于python3 讯飞webAPI语音