前言:大家在使用jmeter压测过程中,可能会度遇到内存溢出的错误,这是为什么呢?
因为jmeter是java写的应用,java应用jvm堆内存heap受负载机硬件限制,虽然我们可以调整堆内存大小,但是单机无法支撑数以万计大并发,此时,需要多个负载机进行分压测试,这样性能瓶颈就不会受负载机硬件限制了。
一、简介:讲解什么是分布式压测
- 普通压测:单台机可以对目标机器产生的压力比较小,受限因素包括CPU,网络,IO等
- 分布式压测:利用多台机器向目标机器产生压力,模拟几万用户并发访问
二、简介:讲解Jmeter分布式压测原理
-
控制机的节点叫master,其他产生压力的机器叫slaves ,即负载机
-
master会把压测脚本发送到 slaves上面
-
执行的时候,slaves上只需要把jmeter-server打开就可以了,不用启动jmeter
-
结束后,slaves会把压测数据回传给master,然后master汇总输出报告和配置详情
注意:必须保证master和slaves安装相同的jdk和jmeter
前提:master的jmeter可以正常打开使用,master和slaves处于同一个局域网下,相互之间可以ping通
官网原理图:
1、将master的jmeter完整复制一份到slaves,master安装的jdk版本也复制一份到slaves
一定要保证master和slaves安装相同的jdk和jmeter,master和slaves处于同一个局域网下,相互之间可以ping通,jmeter的配置和jdk的安装请自行百度或者看我写的jmeter其他相关的文章
2、看master是否能够ping通slaves
3、看slaves是否能够ping通master
如果相互之间无法ping通,请检查防火墙是否处于开启状态,此时请把防火墙关闭或者配置链接策略
4、复制slaves的IP地址到master jmeter的安装目录下,放到master的bin/jmeter.properties的remote_hosts后面
remote_hosts:配置slave的ip和端口号
server_port:服务端口号可以自定义也可以默认,但是必须和slave保持一致
server.rmi.ssl.disable=true:将这个设置成true,是为了保证ssl传输没有问题,不然会报错
5、进入slaves配置jmeter下的bin目录下的jmeter.properties,用vim命令打开
remote_hosts:保持默认127.0.0.1即可
server_port:服务端口号可以自定义也可以默认,但是必须和slave保持一致
server.rmi.ssl.disable=true:将这个设置成true,是为了保证ssl传输没有问题,不然会报错
chmod 755 -R apache-jmeter-5.2.1:赋予jmeter目录读写执行权限
6、启动 slaves jmeter安装目录下的bin目录下的jmeter-server这个文件,目的是让master能够监听到
sh jmeter-server:启动监听
如果启动出现An error occurred: Cannot start. localhost is a loopback address报错
此时可以指定启动ip:sh jmeter-server -Djava.rmi.server.hostname=x.x.x.x
7、master打开jmeter建立好压测脚本,后先简单自测一下看是否ok,然后点击菜单栏的运行、远程启动所有 ,这时候master会把命令分发给slaves,让slaves去执行脚本,实现原理是slaves开了jmeter-server这个文件,master会发命令到这个文件,slaves收到会执行master发的脚本命令并实时的把结果文件传到master的聚合报告中
注意:slaves不需要上传压测脚本,压测脚本会自动发到slaves负载机上;但是,如果脚本中涉及从外部读取的csv文件,那该文件就需要上传到各个slaves负载机上,且要统一目录
默认10个线程
slaves执行命令运行
查看结果树30个请求
聚合报告30个请求
压测完毕远程退出和远程关闭所有的slaves jmeter-server服务
【友情提示】
1、若是脚本中设置的并发线程数是10,采用3台slaves机器去施加压力,那么对于服务端来说,此时的并发线程数是30。
2、为了减少出错的可能性,最好按照如下Jmeter 分布式要求:
3、各个机器在相同目录下安装相同版本的jdk;
4、各个机器在相同的目录下安装相同版本的jmeter;
5、配置/etc/hosts的IP和hostname的映射。
6、修改各个机器的jmeter的默认内存参数,从512m调整为合适大小。
7、发起压测可以采用命令启动,在master机器上进入jmeter的bin目录下,执行如下命令:./jmeter –n –r –t 压测脚本绝对路径,要提前结束压测请ctrl+c,若要重新启动分布式压测,请重新启动slaves
8、若想动态的挑选部分slaves压测,可以采用命令行选项的方式,即在master机器运行命令的时候添加 -R ip:port,ip:port的方法
以上就是jmeter的分布式压测的实践中具体配置和小结提示,喜欢的话大家可以收藏哦。