首页 > 技术文章 > jmeter分布式压测

hanzhang 2018-07-12 12:08 原文

jmeter分布式压测

1 需求分析

1.1 需求

1、 单实例SkyWalking主机CPU80%时,测试其支持TPS值是否能达到5000

2、 单实例SkyWalking主机持续加压2小时,TPS5000时,测试SkyWalking的稳定性

3、 对SkyWalking集群性能测试,测试其TPS为5000时,集群的负载是否均衡

4、 分析 SkyWalking Agent探针对被测试服务的性能影响

官网给出参考:单实例SkyWalking的cpu为80%时,tps为5000

1.2 测试策略

  1. tps已知,5000

  2. 验证性需求,单实例SkyWalking主机CPU指标80%左右时,测试tps值

  3. 稳定性测试,单实例SkyWalking主机持续加压2小时,tps5000

  4. SkyWalking集群性能测试,采用jmeter集群压力机测试,测试SkyWalking集群负载是否均衡

  5. 通过加SkyWalking Agent探针和不加探针,分别压测,分析SkyWalking Agent探针对被测服务167的性能影响

2 设计测试场景

  1. 单个订单接口模拟应用程序,被测主机167

  2. 单实例SkyWalking145主机监控被测服务167,采用逐步加压方式,测试145的CPU达80%左右时,TPS值是否可达5000,加压大约6分钟

  3. 单实例SkyWalking145主机监控被测服务167,TPS值维持5000,持续加压2小时,测试稳定性

  4. SkyWalking集群监控被测服务167,TPS值维持5000,集群压力机加压30分钟,测试SkyWalking集群负载是否均衡

  5. 通过加SkyWalking Agent探针和不加探针,单台压力机分别压测10分钟,分析SkyWalking Agent探针对被测服务167的性能影响

3 环境部署

3.1 组网图

单实例SkyWalking监控被测服务167组网图如下:

 

集群 SkyWalking监控被测服务167组网图如下:

注:所有机器部署在同一网段下

3.2 硬件配置

两台压力机171和178均为Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz,8核8G

其他主机均为Intel(R) Xeon(R) CPU E5-2640 v3 @ 2.60GHz,4核8G

3.3 测试工具

  1. 采用jmeter脚本压测

  2. 采用collectd+influxdb+grafana作为实时监控,其监控数据可持久保存,方便查询

  3. 采用netdata作为实时监控,压测时,观察比较方便

3.4 测试环境部署

171和178作为压力机,173作为调度机,三台机器均安装jmeter

3.4.1 jmeter安装和环境变量设置

  1. centos7,/home目录下,创建jmeter用户

    useradd jmeter && echo jmeter | passwd --stdin jmeter
  2. 官网下载jmeter安装包,解压

    bing.com搜索jmeter,下载安装包,直接解压即可

    解压后,user.properties文件末端添加:

    CookieManager.check.cookies=false

  3. 配置环境变量

    jmeter环境变量配置:

    sudo vi /etc/profile
    末尾添加:
    export JMETER_HOME=/home/jmeter/apache-jmeter-4.0
    export CLASSPATH=$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$CLASSPATH
    export PATH=$JMETER_HOME/bin:$PATH:$HOME/bin
    保存后source下,使其生效
    source /etc/profile
  4. 检查环境变量是否生效

    # jmeter --help
      _   ____   _   ____ _   _ _____       _ __ __ _____ _____ _____ ____
      / \ | _ \ / \ / ___| | | | ____|     | | \/ | ____|_   _| ____| _ \
    / _ \ | |_) / _ \| |   | |_| | _|   _ | | |\/| | _|   | | | _| | |_) |
    / ___ \| __/ ___ \ |___| _ | |___ | |_| | | | | |___ | | | |___| _ <
    /_/   \_\_| /_/   \_\____|_| |_|_____| \___/|_| |_|_____| |_| |_____|_| \_\ 4.0 r1823414

    Copyright (c) 1999-2018 The Apache Software Foundation


    To list all command line options, open a command prompt and type:

    jmeter.bat(Windows)/jmeter.sh(Linux) -?

    --------------------------------------------------

3.4.2 分布式压力机配置和启动

压力机171/178配置如下:

jmeter的bin目录下jmeter.properties中:

remote_hosts=10.34.110.171  #本机IP
server_port=1099 # 前面注释去掉
server.rmi.localport=1099 # 前面注释去掉
server.rmi.ssl.disable=true

除此之外,服务器配置了双网卡,内外网的隔离,jmeter在启动时会优先找内网地址,不识别配置的服务器地址,修改方法如下:

/apache-jmeter-4.0/bin目录下jmeter-server文件:

RMI_HOST_DEF=-Djava.rmi.server.hostname=10.34.110.171   #将前面注释去掉,并修改为压力机的IP

保存后,执行命令./jmeter-server,看到启动的IP和端口1099即可

实际压测时,可将压力机后台运行,nohup ./jmeter-server &

调度器173配置如下:

jmeter.server中:

remote_hosts=10.34.110.171:1099,10.34.110.178:1099
server_port=1099
server.rmi.localport=1099
server.rmi.ssl.disable=true

修改后,保存即可

3.4.3 分布式实时监控部署

collectd+influxdb+grafana环境搭建之前已写过,参考如下:

[collectd+influxDB+grafana搭建性能监控平台](https://www.cnblogs.com/hanzhang/p/9240592.html)

3.4.4 实时监控netdata部署

netdata部署之前已写过,参考netdata实时监控部署

4 编写测试脚本

  1. 单一订单接口,http请求,post方法

  2. 思考时间10ms

  3. 固定吞吐量,保持tps在5000左右

    jmeter固定tps压测参考

  4. 关闭监听器,断言,debug sample等,保存脚本,并传到173调度机上

5 执行测试脚本

  1. 173调度机上执行测试脚本命令如下:

    nohup jmeter.sh -R 10.34.110.171:1099,10.34.110.178:1099 -n -t SkyWalking_test.jmx -l ../jtl/rpjq01.jtl -e -o ../report/rpjq01 &

    后台运行执行脚本,可通过日志查看执行记录,执行完成后,可生成html的报告

  2. 日志如下

    tailf jmeter.log
  3. 关停

    因已配置jmeter的环境变量,关停测试时,任意路径下执行stoptest.sh即可,此时压力机不再加压,但仍在启动中;

    若执行shutdown.sh命令,则关闭压力机,重新执行时,需先开启压力机

  4. 观察后台监控netdata和grafana面板,需要时,做好记录

6 收集数据,给出报告

jmeter的报告以文件夹方式生成,打成zip包,下载到本地,解压,访问html页面即可

实时监控grafana可查看压测过程的曲线图

结果分析

7 发送报告,归档,通知需求方

出具测试报告,并提交

 

 

推荐阅读