zoukankan      html  css  js  c++  java
  • 转转基础服务性能压测实战

    作者|杨立志

    压测背景

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

    压测方案

    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

    
    
  • 相关阅读:
    [转]C# 文本框只能输入数字
    [转]C# dataGridview 报“索引-1没有值”的解决办法
    配置<authorization>节(配置文件)
    [转]javascript的urlencode
    SSM框架搭建问题
    web server
    mysql 系列
    UI 框架、ORM、权限系统
    一个基于 .NET Core 2.0 开发的简单易用的快速开发框架
    DotNetty 版 mqtt 开源客户端 (MqttFx)
  • 原文地址:https://www.cnblogs.com/finer/p/15579259.html
Copyright © 2011-2022 走看看