在性能测试过程中,一旦进行高并发操作时就会出现以下尴尬场景,JMeter客户端卡死、请求错误或是超时等,为了解决这一问题,我们需要将一次大的操作分布在多个服务器上,由多个服务器来承担负载压力。
接下来我们就来看一下如何实现jmeter的分布式并发:
需要在负载机上配置jdk环境和jmeter环境
首先我们需要准备一个负载机,本次演示的负载机是博主在虚拟机上搭建的一个Linux服务器,Linux系统需要安装jdk(不知道如何配置jdk的请自行百度)然后配置Linux环境下的jmeter环境:
官网下载jmeter的版本
https://mirrors.tuna.tsinghua.edu.cn/apache//jmeter/binaries/,我下载的是apache-jmeter-5.1.1.tgz
将下载的包放到/usr/local目录下(此目录可自行设置,一般安装包我都安装在这个目录下),进入此目录解压文件
配置环境变量,进入根目录输入命令vim etc/profile,配置一下环境变量
export JMETER_HOME=/usr/local/apache-jmeter-5.1.1 (不要照搬,改为你自己的路径)
export PATH=$JMETER_HOME/bin:$PATH
然后输入jmeter -v验证,如果出现以下界面,那么恭喜你Linux环境下jmeter就配置成功了
接着进入jmeter的bin目录启动jmeter,命令:./jmeter.sh,可以看到成功启动
master(主压力机)在jmeter.properties中添加remote_hosts
配置路径:...apache-jmeter-5.0in 路径下的jmeter.properties;
remote_hosts=127.0.0.1 后面增加远程负载机的ip和端口号,如果需要添加多个,用逗号分隔就可以;
Slave(远程负载机)在jmeter.properties中添加server_port
server_port=1099
server.rmi.localport=1099
备注:这里的端口号可以自定义,只要与主压力机里面配置的一致即可
进入负载机的usr/local/apache-jmeter-5.1.1/bin目录,编辑jmeter.properties文件
Slave(远程负载机)启动Jmeter-server
命令:./jmeter-server -Djava.rmi.server.hostname=192.168.3.130(启动时必须加上后面的-Djava.rmi.server.hostname=192.168.3.130,ip为负载机ip,不然会报错)启动成功后如下图所示:
配置完成后重启主压力机,查看远程启动
可查看到配置的远程负载机IP,如下图:(主压力机最好,也加上1099端口,启动程序时必须先启动,jmeter.sever文件)
添加一个线程组,添加取样器-http请求
以访问百度为例,添加监听器-察看结果树
至此,分布式并发的配置已经完成!
遇到的问题
任何事都不是一帆风顺的,配置过程中也可能遇到这样那样的问题,以下是我在配置过程中遇到的问题以及解决办法
启动jmeter-server服务时报下图的错误:
解决办法:进入负载机的usr/local/apache-jmeter-5.1.1/bin目录,编辑vim jmeter.properties文件,有一行是这样的server.rmi.ssl.disable=false这行说明什么呢,就是让我们决定是不是要启动SSL。很明显,我的电脑上并没有这个,所以就不能启动。把这个改成server.rmi.ssl.disable=true,并取消注释就ok了
远程启动时一直连接不上负载机
解决办法:遇到这种情况时,可能存在多种因素,可以参考以下步骤逐一排查
(1)远程负载机的Jmeter-server是否启动成功;
(2)远程负载机是否处于联网状态;
(3)防火墙是否处于关闭状态:
centos5/6开启和关闭防火墙命令:
开启:service iptables start
关闭:service iptables stop
centos7开启和关闭防火墙命令:
开启:systectl start firewalld.service
关闭:systectl stop firewalld.service
此方法为临时关闭,即时生效,重启后失效
(4)主压力机和远程负载机的Jmeter版本是否一致;
总结:小编也是一个性能测试初学者,在学习的过程中会遇到各种问题,遇到问题的时候不要慌,也不要上来就去问别人,自己要学会使用搜索引擎,实在不行再去问。解决问题的过程也是学习的过程,更能加深自己的印象!