在使用Jmeter进行性能测试时,如果并发数比较大时候,单机受限内存、CPU、网络IO,会出现服务器压力还没有上去,压测服务器已经由于模拟的压力太大变的很卡甚至死机,这时可以使用Jmeter提供的分布式测试的功能。

一、Jmeter分布式执行原理:

1、Jmeter分布式测试时,选择其中一台作为调度机(master),其它机器做为执行机(slave)。

2、执行时,master会把脚本发送到每台slave上,slave 拿到脚本后就开始执行,slave执行时不需要启动GUI,它应该是通过命令行模式执行的。

3、执行完成后,slave会把结果回传给master,master会收集所有slave的信息并汇总。

  

jmeter压测之后数据分析 jmeter压测方案_jmeter

二、分布式压测环境部署

前提:

1、最好保证master和所有slave机器上的jmeter的版本相同

2、需要保证master和slave都在一个网络中,且在多网卡环境需要保证启动的网卡都在一个网段

3、如果windows系统作为master,Linux系统的服务器作为slave,还要注意master和slave的防火墙是否已经关闭,Linux系统的服务器关闭防火墙命令:

systemctl stop firewalld
systemctl status firewalld
systemctl disable firewalld
systemctl enable firewalld

步骤:

现在我的环境是master机器是windows机,一台slave机器是Linux系统机器。

1、master机器,打开jmeter/bin/jmeter.properties,找到”remote_hosts=127.0.0.1”,把这一行修改为”remote_hosts=127.0.0.1,47.92.67.190(当有多个slave时,各个slave的ip中间用“,”分隔),

把默认的RMI端口号改成任意的值。

jmeter压测之后数据分析 jmeter压测方案_自动化测试_02


2、slave机器自定义端口号

进入Jmeter的bin目录,找到jmeter.properties文件,打开该文件修改如下两个配置项,比如修改端口号为:9870(默认端口号为:1099)

server_port=9870

server.rmi.localport=9870

jmeter压测之后数据分析 jmeter压测方案_jmeter压测之后数据分析_03


jmeter压测之后数据分析 jmeter压测方案_软件测试_04


运行jmeter-server文件,查看端口是否修改成功

jmeter压测之后数据分析 jmeter压测方案_软件测试_05


3、slave机器jmeter jvm调优

为了掠尽所有执行机的硬件和网络资源,加强执行机的发压能力,还需要对每台执行机进行深度jmeter jvm调优(修改jmeter.bat中jmeter的内存参数,从512m调整为合适大小)

set HEAP=-Xms512m -Xmx4000m
set NEW=-XX:NewSize=256m -XX:MaxNewSize=512m

根据经验,堆值(HEAP)最多设置为物理内存的一半,默认设置为512m,如果堆值(HEAP)超过物理内存的一半,JMeter运行速度会变慢,设置会出现“内存溢出”的错误。

4、master机器上运行脚本,查看测试结果

运行->远程启动,选择要执行脚本的slave的机器

jmeter压测之后数据分析 jmeter压测方案_自动化测试_06


查看测试结果:

jmeter压测之后数据分析 jmeter压测方案_自动化测试_07

三、一些注意事项:

1、调度机(master)和执行机(slave)最好分开,由于master需要发送信息给slave并且会接收slave回传回来的测试数据,所以mater自身会有消耗,所以建议单独用一台机器作为mater

2、参数文件:如果使用csv进行参数化,那么需要把参数文件在每台slave上拷一份且路径需要设置成一样的

3、每台机器上安装的Jmeter版本和插件最好都一致,否则会出一些意外的问题

4、遇到执行失败时,可以查看调度机(master)和执行机(slave)上的Jmeter-server.log中的报错信息

比如:

jmeter压测之后数据分析 jmeter压测方案_自动化测试_08