jmeter

我整理了一下性能测试的一些常见指标,大家看看还有没有需要完善的

性能测试是评估系统在特定工作负载下的能力和可靠性的过程。常见的性能测试指标包括以下几种:

1、响应时间(Response Time):系统从接收请求到返回响应所需的时间。

2、吞吐量(Throughput):在单位时间内完成的请求数量,通常以每秒请求数(Requests per Second,RPS)来度量。

3、并发用户数(Concurrent Users):在同一时刻向系统发出请求的用户数。

4、负载(Load):系统在特定工作负载下的表现,通常以每秒请求数(Requests per Second,RPS)或并发用户数来度量。

5、CPU 利用率(CPU Utilization):系统在执行任务时使用的 CPU 资源占总 CPU 资源的百分比。

6、内存利用率(Memory Utilization):系统在执行任务时使用的内存资源占总内存资源的百分比。

7、磁盘 I/O(Disk I/O):系统在执行任务时进行的磁盘读写操作数量。

8、错误率(Error Rate):在执行任务期间发生的错误数量占总请求数量的百分比。

9、网络带宽(Network Bandwidth):表示系统在处理网络请求时的带宽。网络带宽可以帮助确定系统在高并发情况下的性能表现。

10、可伸缩性(Scalability):系统在增加负载时能够保持稳定的表现能力。

11、可靠性(Reliability):系统在长时间运行和高负载下能够保持稳定和可靠的表现能力。

12、TPS和QPS

在性能测试中,TPS(Transactions Per Second)和QPS(Queries Per Second)是两个常用的指标,它们分别用于衡量系统的事务处理能力和查询处理能力。

(1)TPS(Transactions Per Second):TPS指的是系统每秒钟能够处理的事务数,其中事务是指一系列相关的操作,通常需要满足ACID(原子性、一致性、隔离性和持久性)的特性。例如,一个在线购物网站的事务可以包括添加商品到购物车、结算订单、更新库存等操作。TPS越高,表示系统能够更快地处理事务,具有更好的性能。

(2)QPS(Queries Per Second):QPS指的是系统每秒钟能够处理的查询数,其中查询是指从系统中获取数据的操作。例如,一个搜索引擎的查询可以包括用户输入关键字、系统搜索相关文档、返回结果等操作。QPS越高,表示系统能够更快地响应用户的查询请求,具有更好的性能。

需要注意的是,TPS和QPS只是性能测试中的两个指标,实际应用中还需要考虑其他因素,如并发用户数、响应时间、吞吐量等指标,综合评估系统的性能表现。

一、讲在最前面

当前由于压测平台升级,积分商城侧未升级支持压测平台最新的jar包,因此受积分商城影响,星宿台项目压测暂不支持影子库压测,数据都会保存到线上正式数据库,在压测前以及压测过程中请务必确认cookie中未增加影子库标识_duibaPer=1,否则线上压测时容易造成线上正式数据库和影子库数据混乱

后续如果支持影子库压测,会及时更新本文档

二、压测目标明确

兑吧压测通常会遇到以下几种情况的压测目标:

1、客户会提供明确的压测目标tps(qps)以及接口响应时间,例如2000tps,500ms以内

(1)首页需要跟客户明确2000tps的含义

是项目中需要压测的接口同时压测,所有接口tps之和达到2000tps?还是项目中需要压测的接口同时压测,单个接口tps达到2000tps?还是项目中需要压测的接口一个个单独压测,接口tps达到2000tps

(2)其次要跟项目后端开发一起制定压测涉及的接口,一般遵循尽量完整的模拟一个用户进入活动进行主流程操作的原则,例如免登后进入首页抽奖,则一般涉及免登接口、index.html接口、index.do接口、draw.do接口

2、客户未提供明确tps,仅提供了日活用户数uv,或者日活用户访问量pv

(1)仅提供日活用户数uv时,根据uv粗算pv,例如pv=uv*10,10为假设每个用户每天请求10次

(2)根据28原则,80%的请求集中在高峰时间段的20%,一般设定的目标是评估值的3-5倍,则压测目标tps=[(pv*0.8)/(高峰时间段*3600*0.2)]*5

(3)将计算出的压测目标跟客户确认

3、针对本地化的项目,若需要申请服务器部署项目代码,此时我们的压测目标变为需要先压测出x台服务器最多能支撑的tps,计算满足压测目标一共需要多少服务器

例如:压测目标是10万tps,压测10台服务器最多能支持1万tps,那么共需要100台服务器

三、压测环境准备

1、压测方案

可参考:星宿台项目:华为养成压测方案 本地化项目:蒙牛跳一跳本地化压测方案

需要写明本次压测目标:压测涉及的所有接口、压测逻辑

2、测试环境:jmeter编写压测脚本调试

下面以口味王线上压测脚本为例:口味王压测.7z

1、http cookie管理器

用于管理用户cookie,一般默认勾选“每次反复清除cookie”,执行1个线程后清除当前用户cookie,使用下个用户生成cookie执行下一个线程

2、用户定义的变量

管理重复使用的参数,例如ip,http请求中的服务器名称或IP使用${ip}来获取

用户无需在每个http请求中修改ip,只要在用户定义的变量中修改即可

3、免登生成cookie

用于生成用户cookie,将cookie存入本地csv文件,压测其他接口时可以使用

4、csv数据文件设置

可以将大量的变量数据放到csv文件,需要时从中获取

5、正则表达式提取器

常用的是后置处理器-正则表达式提取器,提取当前接口响应中的数据,用于后续接口使用

例如扣积分接口提取data,查询扣积分结果接口引用data

6、响应断言

方便用户在查看结果树中一眼看出接口执行成功还是失败

7、查看结果树

所有接口执行结果列表

8、注意

(1)脚本中需增加每个接口的响应断言,尽量做到精确判断响应成功;增加整个压测脚本的“查看结果树”

(2)需要去掉接口中涉及的签名校验,token校验,风控校验以及其他可能影响压测的校验

(3)使用常用的jmeter内置函数

uid随机生成可以用:${__UUID};提交分数随机分数可以用:${__Random(1,100,)}

(4)线上环境使用免登生成接口: /test/generateSign ,仅支持以下appkey,如需要添加联系@刘凯 ;当前没有任何定制的appid:92053

3、线上环境:jmeter编写压测脚本调试

将脚本中的数据改成线上压测所需的数据,压测代码需要暂时去掉接口中涉及的签名校验,token校验,风控校验以及其他可能影响压测的校验,线上压测项目跑通压测脚本,没有异常报错

四、压测执行

1、线上压测平台地址

https://console.dui88.com/hulk/#/service/perftest/scene,权限需要找@卢澎锋开通

不要去轻易执行压测(是需要收费的),也不要修改其他人的场景配置,但可以查看压测报告

2、压测场景创建

  1. 新建场景

2、场景配置

jmeter压测脚本:线上压测脚本以文本形式打开,复制脚本粘贴到这里,后续也可以直接在这里找到对应的配置项进行修改,例如线程数、调度器时间

是否在压测前自动在脚本中添加【压测场景id】的Cookie选项:务必选择否

jmeter压测数据:如果脚本中有需要csv文件,则选择csv文件上传,同时按照红字提示将脚本中csv地址改成:/data/jmeter/jmeter_data.csv;也可以清除上传的csv文件

3、施压机配置

压测模式:星宿台项目选内网压测;本地化项目若申请新的域名,则选择外网压测

内网slb:选择apisix默认SLB

施压机规格;施压机的性能,一般先选择4核8G,如果后续发现施压机性能不足以支持线程并发数,可以调整规格

施压机数量:选择施压机数量,一般先选择2-4,后续可以调整以提高压测并发数(注意点:施压机分为1台master容器和多台slave容器,只有slave容器才参与施压,例如选择4台施压机,那么只有3台slave容器会执行压测脚本,对目标服务器进行施压)

自动停止阈值:一般默认值即可,这些阈值是为了防止压测出现此类异常情况时能够自动停止压测,以免影响线上;若遇到某些压测场景tps要求很高,响应时间会超过1秒且压测目标也允许的情况下,则可以适当修改接口平均响应时间

4、被压机配置

被压机集群:选线上集群

5、保存场景

该过程会部署压力机,容器启动需等待5-10分钟,压力机系统:hulk-agent,将脚本以及csv文件部署到压力机系统上

6、注意

已启动的场景1小时后机器自动释放,如果需要继续使用该场景,控制台直接点击启动会报错,需要在地址后加debug访问,点击一键修复部署状态,再点击启用

3、场景编辑

1、场景编辑

(1)未执行压测时点击编辑,可以修改脚本或其他配置

修改场景配置-脚本、csv文件,施压机配置-自动停止阈值,保存场景后可以不需要刷新容器,可以实时生效;除此之外的配置修改,保存场景后需要点击“刷新容器”,重新启动才会生效

(2)压测平台直接修改脚本的几个常见地方:

2、注意

压测平台存在缺陷,点击刷新容器会报错,需要从控制台进入,地址后加debug访问,点击一键修复部署状态,再回到场景列表点击刷新容器,即可重新启动容器

4、压测策略

1、首先,压测时务必谨慎选择压测时间点,例如不压0点、10点等定时任务较多的时间点,也可以跟被压系统owner确认可压测时间段;务必通知被压系统ownr,以防影响线上可以及时处理问题;务必注意观察监控以及告警信息

2、其次,可以先设置2个线程数开始循环永久压测,确保脚本在压测平台可以跑通,数据能正常保存至redis和数据库

3、然后,设置较低的线程数,如果不知道刚开始设置多少线程数,建议从10开始,慢慢+5~10进行调整,如果确认还远未达到目标tps,可以适当加大线程数

4、若遇线程数不断增加,接口无报错且响应时间没太大变化,但tps还远不及预期,则可能是施压机达到瓶颈,可以适当修改施压机的规格例如从4核8G改成8核16G,或者增加施压机数量,看看tps是否有变化

注意:增加施压机数量时需要注意,每秒的线程数=单台施压机的线程数*实际施压的施压机数量,例如原本配置2台施压机,则实际施压的施压机数量=1,线程数配置100,则每秒的线程数=100;若配置3台施压机,则实际施压的施压机数量=2,线程数配置100,则每秒的线程数=200;

每秒线程数直接从100变成200翻倍了,线程数跨度太大,可能一下子达到很高的tps,且影响线上,因此建议增加施压机数量时,同时减小单台施压机的线程数,例如配置3台施压机,则实际施压的施压机数量=2,线程数配置50,则每秒的线程数=100,然后再慢慢增加线程数

5、压测监控

压测前建议先加入兑吧运维沟通群,查看系统告警

监控地址:https://console.dui88.com/monitor/#/monitor/system_monitor/container

以下涉及监控为星宿台相关,压测其他系统时可以咨询相关系统owner

  1. 星宿台是否有错误日志

注意:压测的时候压测平台明明可以直接通过错误率来判断是否有报错,为什么还需要查询系统日志是否有报错呢?原因是压测平台的错误率仅统计4xx、5xx以及其他异常,并不包含业务异常

2、星宿台容器监控

输入框输入星宿台分区应用进行查询,线上压测cpu建议控制在50%以下,不可过高

3、星宿台应用监控

输入框输入星宿台分区应用,找到对应项目id点击show查看整个项目数据;也可以点击项目id,查看所有接口的数据

  1. 星宿台业务监控(一般不太关注)

5、星宿台数据库监控

找到对应星宿台分区的rds实例;不知道是哪个rds实例,可以咨询系统owner

6、星宿台redis监控

星宿台无论何区,均是如图的实例;不知道是哪个redis实例,可以咨询系统owner

6、压测执行

点击场景的控制台进入,点击“开始压测”,执行压测

实时指标监控;点击停止压测,可停止本轮压测;也可以在脚本中设置调度器控制压测时间,时间到也会自动停止

  1. 压测报告查看

五、压测报告

1、客户有压测报告模板的,则将客户所需内容进行填写即可

2、客户无压测报告模板的,可以参考兑吧内容的压测报告模板,也可以进行一定的修改

参考:41 星速台-压测报告(对外)

六、小知识点(随时补充)

1、压测任何场景,都需要提前设置好星宿台项目的限流阈值(线上可以找@贾学智进行配置),防止压测流量过大,导致线上正式流量被挤压,影响线上;同时也要关注系统、网关层面的限流阈值;这些都是可能影响tps无法压上去的原因

星宿台网关项目限流

星宿台网关分区限流

星宿台网关限流

压测相关文档:

压测平台使用文档 http://gitlab2.dui88.com/basic_platform/spring-boot-ext/wikis/%E6%8A%80%E6%9C%AF%E6%96%B9%E6%A1%88/_%E5%8E%8B%E6%B5%8B%E5%B9%B3%E5%8F%B0

压测老流程文档(已经废弃,需要使用新流程) http://gitlab2.dui88.com/basic_platform/spring-boot-ext/wikis/Starter%E7%89%B9%E6%80%A7/_perftest%E3%80%90%E7%BA%BF%E4%B8%8A%E5%8E%8B%E6%B5%8B%E3%80%91

压测新流程改造思路 http://gitlab2.dui88.com/basic_platform/perftest-spring-boot-starter/wikis/home

压测新流程升级文档 http://gitlab2.dui88.com/basic_platform/perftest-spring-boot-starter/wikis/%E5%8E%8B%E6%B5%8B%E6%96%B0%E6%B5%81%E7%A8%8B%E5%8D%87%E7%BA%A7%E6%96%87%E6%A1%A3

兑吧系统owner一览:兑吧业务系统Owner

使用if控制器或吞吐量控制器来模拟混合场景压测:http://t.zoukankan.com/pachongshangdexuebi-p-13392484.html

聚合报告数据csv导出:

若csv文件中的中文存在乱码,则可以将csv文件先用记事本打开,此时不会乱码,然后另存为csv,将编码从UTF-8改成ANSI,保存即可

插件管理器安装:https://www.pudn.com/news/625767eb60196e4b84a9012c.html

常用插件:https://www.cnblogs.com/xyztank/articles/16784817.html

tps走势图已csv文件或图片导出:在图表区域右键进行选择

原加减积分系统thirdparty不可扩容,预估只能承受每秒700tps左右,因此大流量的项目涉及加减积分则无法支撑;

目前已经新建系统thirdparty-service-vnew,可使用如下方法将对应appid的所有项目加减积分调用切换至新系统;

目前口味王应用是走的新系统,之前压测结果是:6台机器,扣积分接口能支撑2500tps

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值