新手区 jmeter 分布式压测详细配置和举例说明,还小结一些注意事项,避免踩坑

大话性能 · 2018年09月11日 · 最后由 大话性能 回复于 2018年10月19日 · 1490 次阅读

问题背景

当有些项目的用户数比较大的时候,我们进行压测的时候也需要较大的并发,而单台服务器的能够发送的并发量毕竟是有限的,那如何增加并发量呢?

解决方法

利用jmeter的分布式压测,jmeter为了提升并发量,支持分布式压测,1台master,多台salve,一般来说,master只做统计收集、下发脚本的工作,而不作为施压机,主要是出于性能考虑。
Linux下安装jmeter简单,直接把jmeter上传到Linux服务器(服务器上只需要安装好java即可)。进入apache-jmeter的bin目录下,更改jmeter为可执行权限。即安装成功。
在其他多台机器上按照同样的方法部署好jmeter。

举例说明

下面具体举例说明,

更多工作中的测试技能干货,大家可以关注微信公众号<大话性能>,会持续不断分享。

http://dwz.cn/NNW9Wm5G

现在假设,压力机共4台,10.151.71.185、10.151.71.186、10.151.71.187、10.151.71.192
其中10.151.71.185同时作为master,其他3台只做slaver。

1、在作为slaver的机器上运行jmeter-server;
上面4台按照安装的步骤,同时把jmeter安装在同一个目录/home后,进入bin目录,修改3台slaver机器下的jmeter-server为可执行,并执行./jmeter-server。执行成功后显示如下:

2、上传压测脚本和外部读取的csv文件;
只需要上传UDPtest.jmx脚本到master服务器,节点机不需要上传,压测脚本自动会发到slaver试压机上;但是,如果脚本中涉及从外部读取的csv文件,那该文件就需要上传到各个slaver施压机上。
3、在master机器上修改remote_hosts;
进入到master 185这台服务器的jmeter的bin目录下,修改jmeter.properties。修改如下,添加各个slaver节点机的ip,默认通信端口为1099;

上述方法是写死了各个slaver机器ip到配置文件中,若想动态的挑选其中部分压测机,可以采用命令行选项的方式,即在master机器运行命令的时候添加 -R ip:port,ip:port的方法;
4、在master 运行脚本;
发起压测,在master机器上进入jmeter的bin目录下,执行如下命令:./jmeter –n –r –t /home/UDPtest.jmx
要提前结束需要ctrl+c,若要重新启动分布式压测,需要在各个slaver上启动./jmeter-server。然后再master上重新执行步骤4即可。

【友情提示】:

A、若是脚本中设置的并发线程数是100,采用3台slaver机器去施加压力,那么对于服务端来说,此时的并发线程数是300。
B、为了减少出错的可能性,最好按照如下Jmeter 分布式要求:
1、各个机器在相同目录下安装相同版本的jdk;
2、各个机器在相同的目录下安装相同版本的jmeter;
3、配置/etc/hosts的IP和hostname的映射。
4、修改各个机器的jmeter的默认内存参数,从512m调整为合适大小。

以上就是jmeter的分布式压测的实践中具体配置和小结提示,大家可以收藏。

大家可持续关注大话性能公众号,不断学习测试实战技能和高薪岗位内推。

共收到 19 条回复 时间 点赞

大家可以收藏

一般多少并发需要使用到slave,如何去评测这个值?

Wenbo 回复

一方面取决于服务器本身配置,配置高可以发起的并发就多,另一方面也取决于被测试服务器的处理快慢,如果tps很快,压测机这边发送请求的速度也会很快,消耗的资源就会多。因此在实践中,如果单台机器压测时候,观察cpu使用率超过80%多的时候,就可以考虑使用slave。

3、配置/etc/hosts的IP和hostname的映射。 这个可以稍微给点详细信息么,还有就是 作为master的jmeter 方位其他节点的jmeter时 需不需要linux的账户权限呢

就是先看下机器的域名,命令是hostname,然后vi /etc/hosts 添加一条ip 和hostname即可。第二个问题没看懂


写完也发个帖子出来

Mr.W 回复

666

不建议master机同时施压。。。

果冻 回复

是的,这里只是举个例子,master还是只做收集用为好

其实大家可以思考,怎么用脚本自动化启动分布式压测。

请问【2、上传压测脚本】这个master和salver一起施压吗

这个根据前面的配置,如果前面hosts配置了master机器一起当压测机,你就会一起施压,如果没配置,那是不会的。

大话性能 回复

嗯,明白了
还有两个疑问
1、master机这时候得到的报告就是整个压测的情况是吗?每个salver机上面是够还可以输出的报告,相当于这台salver的压测报告?
2、多台salver的时候,是怎么调整每台salver的线程数的,master自动分配?这样每台salver的发起线程是差不多的?
(没有条件做分压,所以问题比较多😂

问题1:
master机器上出的结果,是所有机器汇总后的性能测试结果。
问题2:
每台salve机器上起的线程数是一样的,脚本里假设线程数是10,5台slave的话,每台10个线程,共50个线程对服务器压测。

实践出真知,而不是看看

除了修改内存。还有没有什么办法提高slave的单机并发数? jmeter哪个版本性能更强?

还可以修改每个线程占用的大小,xss。昨天看到jmeter都已经是5.0版本了,建议用3.3或4.0的即可,也不能太老

大话性能 回复

能说下您的经验吗?大概什么配置的机器,多大并发,jmeter的具体配置?

这个也还取决于你的发送请求的大小和脚本的复杂度,如果你的脚步会不断的产生新的对象,这些都会占用内存的。自己平时一般的脚步,在2c4g的机器配置上,基本上可以跑个500-1k的并发。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册