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

测试开发社区

共 2724字,需浏览 6分钟

 · 2021-08-05

作者|杨立志

压测背景

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

压测方案

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



浏览 16
点赞
评论
收藏
分享

手机扫一扫分享

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

手机扫一扫分享

举报