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

大话性能 · 2018年09月11日 · 最后由 童筱七 回复于 2021年10月25日 · 6493 次阅读

问题背景

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

解决方法

利用 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 的分布式压测的实践中具体配置和小结提示,大家可以收藏。

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

共收到 20 条回复 时间 点赞

大家可以收藏

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

Wenbo 回复

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

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

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


写完也发个帖子出来

Mr.Wang 回复

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 的并发。

请问楼主的分布式压测环境是否有接入 influxdb 的实时监控功能?因为近期需要将压测环境拓展为分布式环境,暂时还不确定分布式环境里怎么实现每个 slave 上请求信息的采集。楼主有啥处理经验不?😀

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