转转基础服务性能压测实战
作者|杨立志
压测背景
为了业务稳定性、系统稳定性、业务大促目标提供基础保障。
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、梳理压测数据,压测方案,确定压测场景。