前言
最近小编在做压力测试,用到的工具是jmeter,之前小编在jmeter压测分析中提到了针对测试报告,可以对代码、打包方式和服务器架构做调整和优化,但是还有一点需要注意,就是jmeter本身只是一款软件,过大的并发量全都集中在一个软件和一台服务器中,最后测试报告中数据不理想也有一定程度是由jmeter本身和jmeter本身所在服务器性能、网络状态造成的,所以针对此,小编做了jmeter分布式,利用多台服务器进行分布式压测。
jmeter分布式部署 到底是什么?
jmeter分布式部署,会将一台作为调度机(master),其他机器作为执行机(slave),我的理解是调度机就是boss,只负责分发任务,收集结果,执行力就是员工,负责真正的执行。执行时,调度机会把脚本发送到每台执行机上,执行机拿到脚本后就开始执行。执行结束后,执行机会把结果会传到调度机中,调度机会收集所有执行机的信息并且进行汇总。
这样,加入我们需要800的并发量,如果有两台执行机,那么每台执行机同时进行400并发,不仅做到了要求的800并发,而且将800并发分散到了两台机器上,一定程度降低了服务器CPU、内存、网络等问题对压测结果造成的困扰。当然,并发量和执行机数量根据实际情况而定(服务器配置、网络情况)。
jmeter分布式部署,如何做呢?
前提
调度机和所有的执行机都需要安装jdk和jmeter。详情请参考Linux下安装jmeter。
步骤
1.执行机
修改jmeter的bin 目录下的jmeter.properties文件,修改server_port和server.rmi.localport两行为端口号。格式如下:
server_port=1099
server.rmi.localport=1099
修改jmeter的bin目录下的jmeter.properties文件,找到remote_hosts一行,修改为所有执行的ip和端口。格式如下:
remote_hosts=192.168.xx.xx:1099,192.168.aa.bb:1099
(1).启动所有执行机的server服务,即bin目录下jmeter-server,命令如下:
jmeter-server -Djava.rmi.server.hostname=192.168.xx.xx
(2).调度机执行分布式指令
jmeter -n -t test.jmx -R 192.168.xx.xx,192.168.xx.xx -l test.jtl
或者
jmeter -n -t test.jmx -r -l test.jtl
前者是写出了执行机的IP,即规定那几台执行机记性,后者用-r代表所有执行机都执行。
注意(特别重要,这几点都有注意到,不然满地的坑)
1.关闭所有执行机和调度机的防火墙。
2.执行机和调度机jmeter版本一定要一致并且安装目录一致。
3.jmeter分布式默认端口为1099,网上有用成功的,但是我没有用成功,如果1099没有用成功,那么可以看一下那些端口没有被使用,再使用。
4.如果用到了CSV进行了参数化,那么调度机上也要放置csv文件,并且路径也要一致。
总结
jmeter分布式部署和测试,虽然满地是坑,走了不少弯路,但是最终成功的一刻还是超级欣慰的是。研究东西一定要具备耐心和毅力,相信自己,会做到的!