Jmeter分布式压测和监控实践

发表于:2017-9-22 14:31

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:西门飞冰    来源:博客

  1.前言
  对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题;如果当前架构快达到性能瓶颈了,是横向扩容性能提升大,还是纵向扩容性能提升大。
  如果需要了解这些信息,需要在两方面下功夫,一个是对服务器进行性能测试,一个是对服务器进行性能监控。
  通过对服务器进行性能测试:我们可以了解到当前架构的性能瓶颈,还可以对架构横向扩容和纵向扩容来进行测试,对后期的架构扩容提供数据参考。
  通过对服务器进行性能监控:我们可以了解当前服务器的CPU、内存、IO等资源是否耗尽,我们可以在监控系统添加触发器,一旦服务器资源在快要达到瓶颈的时候,我们可以触发一个报警让运维人员来处理,也可以触发一个让架构进行自动化扩容(如果是云平台,直接调用api创建主机,ansible部署应用和程序)
  本文将介绍下,我在工作中使用jmeter测试性能瓶颈的一些实践。本文做性能测试适用于移动互联网架构,非移动互联网架构有其他更好的测试方法。
  2.Jmeter分布式压测介绍
  在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制,下面是架构图。
  原理:比如我在jmeter server配置线程数为10,循环次数为100,也就是会对测试服务器发起1000次请求,我有3台agent服务器,如果我在server端选择远程启动压力测试,那么每台agent都会对测试服务器发起10*100次请求,那么这次压力测试产生的请求就是10*100*3=3000次。
  如果对原理不是很明白,看完下面的操作之后就会理解了。
  3.Jmeter分布式压测环境搭建
  3.1.搭建前说明
  服务器环境说明:做性能测试可以直接在在云平台按需购买压力机,一旦测试结束释放压力机即可。
  分布式环境压力服务器要求:
  需要server(控制机)和agent(压力机),agent搭建在linux(centos 6.5)服务器环境下,server搭建在windows(server 2012)环境下。
  压力测试瓶颈大都在带宽上面,需要保证压力机的带宽要比服务器的带宽高,不然压力上不去。
  需要保证agent和server都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段。
  需要保证server和agent之间的时间同步。
  关闭防火墙。
  3.2.Windows部署jmeter
  (1)部署jdk环境,配置path变量,安装完成效果如下
  
  (2)直接去官网下载最新的二进制源码包即可。
  (3)解压jmeter到指定目录,设置path变量,安装完成之后,在命令行运行jmeter命令,如果可以正常启动jmeter,说明环境配置ok。
  3.3.Linux部署jmeter
  (1)下载安装
  wget http://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/apache-jmeter-3.1.zip
  unzip apache-jmeter-3.1.zip -d /usr/local/
  cd /usr/local/
  ln -s apache-jmeter-3.1/ jmeter
  (2)配置启动脚本
  #!/bin/bash
  # chkconfig: 345 26 74
  # description: jmeter agent
  myip=`ifconfig eth0 |awk '/inet addr/{gsub(/addr:/,"");print $2}'`
  cmd="/usr/local/jmeter/bin/jmeter-server -Djava.rmi.server.hostname=$myip"
  start(){
    $cmd &
  }
   
  stop(){
      jmeter_pid=`ps aux | grep jmeter-server | grep -v grep | awk '{print $2}'`
      for pid in $jmeter_pid;do
      kill -9 $pid
      done
  }
   
  act=$1
  case $act in
   'start')
     start;;
   'stop')
     stop;;
   'restart')
     stop
     sleep 2
     start;;
    *)
     echo '[start|stop|restart]';;
  esac
  (3)启动jmeter agent服务,验证是否监听1099端口
  [root@jmeter-agent-01 ~]# /etc/init.d/jmeter-agent start
  [root@jmeter-agent-01 ~]# netstat -lntp | grep 1099
  tcp        0      0 0.0.0.0:1099                0.0.0.0:*                   LISTEN      414/java
  3.4.分布式环境配置
  (1)确保server和agnet安装正确。
  (2)Agent启动,并监听1099端口。
  (3)在server机器的jmeter安装目录下bin目录下,找到properties文件,修改远程主机选项,添加3个agent服务器的地址。
  (4)启动jmeter server,多网卡模式需要指定IP地址启动
  jmeter -Djava.rmi.server.hostname=192.168.10.61
  (5)验证分布式环境是否搭建成功
  1、jmeter启动之后在如下选项中,会出现你添加的远程主机列表
  2、创建一个请求测试:创建一个访问百度的请求,访问次数为一次,配置如下:

  直接点击启动,是jmeter server机器发起一次请求,结果如下
  请求所有之前的请求数据之后,在选择远程全部启动,查看发起的请求就是三次,也就是每个agent服务器按照着server的配置,请求了一次。

  如果你的环境在选择全部启动之后,没有报错,且发起请求数量和agent服务器数量一致,说明jmeter分布式压力测试环境搭建成功,可以进行测试了。
  4.Jmeter断言
  4.1.断言介绍
  jmeter断言常用有两种,一种是响应断言,一种是响应时间断言,如果响应内容不满足断言的配置,则认为这次的请求是失败的。
  响应断言:判断响应内容是否包含指定的字符信息,用于判断api接口返回内容是否正确。
  响应时间断言:判断响应时间,是否超过预期的时间,用于判断api接口返回时间是否超过预期。
  4.2.断言配置
  (1)修改http为实际的api测试请求。
  (2)断言添加方式:右击测试计划的http请求,选择添加à断言à添加响应断言和断言持续时间。
  (3)配置响应断言:我们接口正常返回code值为2000,如果接口返回code值不是2000表示接口异常,为了测试,这里修改为接口返回code值不为2222则表示访问失败。
  (4)配置断言响应时间:设置请求接口时间超过1毫秒,则认为请求失败。
  (5)验证断言配置:发起http请求,由于返回内容code值不为2222,以及访问时间超过1毫秒,所以认为访问失败。


21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号