在工作中使用jmeter做大并发压力测试的场景下,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,但是压测服务器已经由于模拟的压力太大死机了。为了让jmeter工具提供更强大的负载能力,jmeter提供了多台机器同时产生负载的机制。
原理:比如我在jmeter server配置线程数为10,循环次数为100,也就是会对测试服务器发起1000次请求,我有3台agent服务器,如果我在server端选择远程启动压力测试,那么每台agent都会对测试服务器发起10100次请求,那么这次压力测试产生的请求就是10100*3=3000
分布式环境压力服务器要求:
需要server(控制机)和agent(压力机),agent搭建在linux(centos 6.5)服务器环境下,server搭建在windows(server 2012)环境下。
压力测试瓶颈大都在带宽上面,需要保证压力机的带宽要比服务器的带宽高,不然压力上不去。
需要保证agent和server都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段。
需要保证server和agent之间的时间同步。
关闭防火墙。
(1)部署jdk环境,配置path变量
(2)直接去官网下载最新的二进制源码包即可。
(3)解压jmeter到指定目录,设置path变量,安装完成之后,在命令行运行jmeter命令,如果可以正常启动jmeter,说明环境配置ok。
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
配置启动脚本
#!/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
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启动之后在如下选项中,会出现你添加的远程主机列表
创建一个请求测试:创建一个访问百度的请求,访问次数为一次
请求所有之前的请求数据之后,在选择远程全部启动,查请求就是三次,也就是每个agent服务器按照着server的配置,请求了一次。
如果你的环境在选择全部启动之后,没有报错,且发起请求数量和agent服务器数量一致,说明jmeter分布式压力测试环境搭建成功,可以进行测试了
并发测试直接发起指定数量的请求,比如一起发起10万请求看一下系统的处理能力,这个时候如果需要服务器的资源使用信息,就不能使用比如zabbix监控系统了,因为一般处理10万请求,对于我们来说20秒可以处理完毕,但是zabbix数据采集是每分钟一次,这样采集到的数据明显是不准的,这样就需要通过系统自带的监控命令,来实时查询服务器的性能,比如可以通过dstat或者glances等动态监控命令来分析系统的性能。
补充:不是测试每一个接口都需要进行这样的实时监控,比如过测试我的大部分接口TPS可达5000,但是其中一个接口只能达到2000这个时候就需要在测试的时候实时监控,看一下到底是什么原因导致性能上不去。是由于返回数据太大导致网络带宽被占满;还是sql执行时间太长导致数据库负载高,还是代码有问题导致web服务cpu占用高。
稳定性测试就是持续不断模拟指定数量请求,来访问服务器,比如我每秒向测试服务器发起4000请求,持续12小时,来看看服务器会出现什么情况,这个时候就需要用到zabbix来进行监控了,下面是我做性能测试的部分监控接口,包含tomcat每秒请求,服务器入口流量,整个集群每分钟请求的http状态码统计,还有服务器资源使用信息。
如需了解更多测试技术请关注:深圳市多测师信息技术有限公司http://www.duoceshi.cn/duoceshi/Tech_article/422.html
上一篇: 森林里的农家乐——宝安十班户外拓展
下一篇: 软件测试之手工测试人员如何转测试开发?