转转基础服务性能压测实战

测试开发社区

共 2724字,需浏览 6分钟

 ·

2021-08-05 10:02

作者|杨立志

压测背景

为了业务稳定性、系统稳定性、业务大促目标提供基础保障。

压测方案

1、压测服务

(1)确定压测服务:

通过服务管理平台监控数据获得,核心服务核心接口流量较高的top10接口。

(2)确定压测接口

服务管理平台中监控获得历史大促时的QPS高峰数据,响应时间ms级别。

缓存命中率RD给出大部分都是90%以上甚至99%。

由于增加了新业务,以及服务有一些优化。大促预估单接口QPS在历史压测基础上增加30%量。

说明:QPS目标值必须大于等于历史压测结果。可以根据历史大促增长量以及新业务的拓展进行评估。

举例:假如接口getProductBussinessById ,目标QPS15600,缓存命中率92%

2、压测工具

jmeter 压测平台:是基于jmeter工具二次开发的压测平台。目前仅支持http协议。RPC接口可以通过脚本调用方式实现。

3、压测时间

为防止影响线上用户,压测定于凌晨之后进行。

4、压测场景

(1)压测时长 每次并发 5分钟。

(2)数据参数化,根据缓存命中率 部分数据走缓存,部分数据直接走数据库

(3)单接口压测。摸底接口是否达到目标并发量,混合场景不在本次压测范围。


压测脚本设计

由于是scf协议,不能用jmeter压测http方式进行压测。所以本次采用脚本方式调用接口,然后通过jmeter加载脚本来进行测试。

参数化数据分两个文件,一个是缓存中已经存在的数据,一个是缓存中不存在的数据。

另外说明一下:读取文件不易过大,会降低性能。

缓存文件:原来4MB分割为 2000个小文件。下图为部分截图

非缓存文件同理。

1、压测脚本实例

getProductBussinessById 接口脚本实例,其他接口同理。

setupTest方法中是初始化数据,半部分代码截图

下面是jmeter执行的并发方法。通过随机数百分比占比来确定是否使用缓存数据,还是非缓存数据。

由于命中率92%,所以随机数小于92的走缓存,大于92的数据走非缓存。

下图没有加断言,压测结束后会通过命令行分析返回结果日志。

2、jmeter配置

说明:jmeter上传下面各种配置比较复杂。压测平台后续版本会优化此处,方便快捷操作。

(1)上传lib0

lib0是你本机eclipse或者ideal 生成的脚本依赖的jar包以及用例jar包

ideal为例子:脚本写好后, 第一、点击clean ,第二点击package

服务器进入 lib下,命令: cd /opt/soft/apache-jmeter/lib

 #上传lib0   命令:rz -bey  

 解压道lib文件夹下 此时生成了lib0文件夹  命令:unzip lib0.zip

(2)上传本地用例jar包

进入 /opt/soft/apache-jmeter/lib/ext    命令:cd /opt/soft/apache-jmeter/lib/ext

上传用例jar包  命令:rz -bey   

  选择工程生成的jarD:\mycode\zhuanzhuan_performance_zzsearch\target\jar\zhuanzhuan_performance_zzsearch-0.0.1-SNAPSHOT.jar

(3)上传scf.conf 以及参数化文件

上传配置scf.conf文件以及 参数化文件(若有参数化文件,路径自己定义的路径。一般我都放在/opt/soft/apache-jmeter/data)

cd /opt/soft/apache-jmeter

mkdir data

cd data

rz -bey  #上传scf.conf 以及参数化数据文件 (代码写死的配置在哪路径 就放在哪里路径 我这只是个例子)

注意:

scf.conf存放路径跟代码中要一致

比如代码中scf.conf配置路径是 /opt/soft/apache-jmeter/data/scf.config  那么 就上传到服务器该配置的目录下

参数化所需要数据 同理

(4)修改jmeter结果日志文件路径

cd /opt/soft/apache-jmeter/bin

vi jmeter-server

${DIRNAME}/jmeter ${RMI_HOST_DEF} -Dserver_port=${SERVER_PORT:-1099} -s -j /opt/soft/apache-jmeter/jmeter-server.log "$@"

3、执行压测

执行压测不多说,每次并发5分钟。

需要注意的点是确定压测基线,不能一上来就几十、几百个并发。

并发过程中,关注监控 以及系统资源的利用。

若并发量大的情况,根据个人经验,并发过程中建议手动打开页面查看真实响应的用户体验。


压测结果

监控结果: 压测结果符合要求

日志分析:压测日志数据由于服务器已经归还,下面是订单列表jmeter压测最终日志分析,可以通过命令行统计,实例如下:

其中一台jmeter日志分析:结果中没有返回数据为288926 ,总数440365    没有返回数据的结果约占 65% 。


总结

1、确定目标QPS

      QPS每秒查询率(Query Per Second) 
   QPS:每秒请求数,就是说服务器在一秒的时间内处理了多少个请求

      TPS(Transactions Per Second)每秒事务数,每秒系统能够处理的事务次数

      TPS可能包含多个QPS

2、压测前需要和RD确认, 所调服务流量限制,以及白名单等

3、压测代理机器,沙箱机器尽量多申请几台,并发测试一台压测机器可能并发不上去。

4、本次压测只是单接口摸底测试。并没有混合接口测试。若业务需要可以进行混合接口压测,比较真实。

5、由于被压测接口为内部调用的接口,外部访问不到。所以压测的时候需要在沙箱机器上进行。

6、梳理压测数据,压测方案,确定压测场景。


end



浏览 25
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报