Jmeter分布式压测和监控实践

一、前言

对于运维工程师来说,需要对自己维护的服务器性能瓶颈了如指掌,比如我当前的架构每秒并发是多少,我服务器最大能接受的并发是多少,是什么导致我的性能有问题;如果当前架构快达到性能瓶颈了,是横向扩容性能提升大,还是纵向扩容性能提升大。
  如果需要了解这些信息,需要在两方面下功夫,一个是对服务器进行性能测试,一个是对服务器进行性能监控。
  通过对服务器进行性能测试:我们可以了解到当前架构的性能瓶颈,还可以对架构横向扩容和纵向扩容来进行测试,对后期的架构扩容提供数据参考。
  通过对服务器进行性能监控:我们可以了解当前服务器的CPU、内存、IO等资源是否耗尽,我们可以在监控系统添加触发器,一旦服务器资源在快要达到瓶颈的时候,我们可以触发一个报警让运维人员来处理,也可以触发一个让架构进行自动化扩容(如果是云平台,直接调用api创建主机,ansible部署应用和程序)

二、Jmeter分布式压测介绍

在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。


原理:比如我在jmeter server配置线程数为10,循环次数为100,也就是会对测试服务器发起1000次请求,我有3台agent服务器,如果我在server端选择远程启动压力测试,那么每台agent都会对测试服务器发起10100次请求,那么这次压力测试产生的请求就是10100*3=3000

三、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分布式压力测试环境搭建成功,可以进行测试了。

四、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毫秒,所以认为访问失败。


五、Jmeter变量配置(参数化)

使用变量的场景举例:我们需要测试性能的曲线模型,也就是由轻压力慢慢变为重压力,来测试我们的性能拐点,这个时候jmeter就需要配置多个线程组,每个线程组需要设置http请求。由于每次测试性能的曲线模型都是同一个接口,所以每次修改接口都需要修改http请求,这个时候如果使用了变量,就意味着每次修改api只需要修改api的变量即可。

在测试计划中设置参数:



引用:


六、测试中的监控

6.1.并发测试监控

并发测试直接发起指定数量的请求,比如一起发起10万请求看一下系统的处理能力,这个时候如果需要服务器的资源使用信息,就不能使用比如zabbix监控系统了,因为一般处理10万请求,对于我们来说20秒可以处理完毕,但是zabbix数据采集是每分钟一次,这样采集到的数据明显是不准的,这样就需要通过系统自带的监控命令,来实时查询服务器的性能,比如可以通过dstat或者glances等动态监控命令来分析系统的性能。



  补充:不是测试每一个接口都需要进行这样的实时监控,比如过测试我的大部分接口TPS可达5000,但是其中一个接口只能达到2000这个时候就需要在测试的时候实时监控,看一下到底是什么原因导致性能上不去。是由于返回数据太大导致网络带宽被占满;还是sql执行时间太长导致数据库负载高,还是代码有问题导致web服务cpu占用高。

6.2 稳定性测试监控

稳定性测试就是持续不断模拟指定数量请求,来访问服务器,比如我每秒向测试服务器发起4000请求,持续12小时,来看看服务器会出现什么情况,这个时候就需要用到zabbix来进行监控了,下面是我做性能测试的部分监控接口,包含tomcat每秒请求,服务器入口流量,整个集群每分钟请求的http状态码统计,还有服务器资源使用信息。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,457评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,837评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,696评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,183评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,057评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,105评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,520评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,211评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,482评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,574评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,353评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,213评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,576评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,897评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,489评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,683评论 2 335

推荐阅读更多精彩内容