jmeter linux下分布式压测部署说明

多台 linux 分布式测试

先来理解下分布式测试原理,看下图:

1、Jmeter 分布式测试时,选择其中一台作为调度机 (master/Controller),其它机器做为执行机 (slave/Agent)。

2、执行时,master 会把脚本发送到每台 slave 上(csv有依赖的话还是要在每台slave上上传,且路径一致),slave 拿到脚本后就开始执行,slave 执行时不需要启动 GUI,应该是通过命令行模式执行的。

3、执行完成后,slave 会把结果回传给 master,master 会收集所有 slave 的信息并汇总。

注意:

(1)每一台 jmeter 远程服务器(slave 机器)都执行相同的测试计划,jmeter 不会在执行期间做负载均衡,每一台服务器都会完整地运行测试计划;

(2)采用 JMeter 远程模式并不会比独立运行相同数目的非 GUI 测试更耗费资源。但是,如果使用大量的 JMeter 远程服务器,可能会导致客户端过载,或者网络连接发生拥塞;

(3)默认情况下,master 机器是不执行参与生成并发数据的;

(4)调度机 (master) 和执行机 (slave) 最好分开,由于 master 需要发送信息给 slave 并且会接收 slave 回传回来的测试数据,所以 mater 自身会有消耗,所以建议单独用一台机器作为 master

具体步骤如下:

1、master和slave的linux 上安装 jdk 和 jmeter(jdk 和 jmeter 的版本以及安装路径要保持一致,不然可能会出错,无法成功执行)

2、

master配置:

  • jmeter.properties文件,remote_hosts配置上slave端的IP和端口号(端口号默认1099),多个slave地址用逗号分隔;
  • Master上已上传脚本文件和参数化文件;

slave配置:

  • jmeter.properties文件,server.rmi.ssl.disable=true;
  • Slave上参数化文件(如csv配置文件)要放在jmeter的bin目录下;

3、slave上修改jmeter/bin/jmeter-server
      -删除注释并将value修改为slave的IP地址

RMI_HOST_DEF=-Djava.rmi.server.hostname=10.1.44.123

在slave上启动  :jmeter-server -Djava.rmi.server.hostname=ip   或者如下指令  nohup  ./jmeter-server  -Djava.rmi.server.hostname=10.1.44.123

参照该文档:https://www.jianshu.com/p/347d889cc327

4、在master上,打开配置文件 /bin/jmeter.properties 配置 agent 节点的 IP,如 123和122是两台slave机器的ip

# Remote Hosts - comma delimited
remote_hosts=10.1.44.123:1099,10.1.44.122:1099 #代理机ip和端口,可填写多个,配置的是slave的ip和端口
#remote_hosts=localhost:1099,localhost:2010

# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=1099

5、执行脚本测试: jmeter -n -t test.jmx -R 10.1.44.122,10.1.44.123 -l test.jtl   

 

常见问题:

问题 1:

在 slava 机器上执行 jmeter-server 的时候,会出现以下的问题:

1、出现 XII DISPLAY 这样的错误,可以先执行下面命令:

echo $DISPLAY

如果内容为空(我就是内容为空),那么,就继续执行下面的命令:

DISPLAY=:0
#DISPLAY=localhost:0.0

上面两个都可以

问题 2:

jmeter-server 启动失败。通常有以下两个错误:

1、Unable to get local host IP address

2、xxx is a loopback address

一般上面的两个问题,都是由 host 文件引起的,我们需要修改 host 文件,可以执行下面的命令:

vi /etc/hosts

我是将 127.0.0.1 替换成本机 ip 地址的。

针对 “xxx is a loopback address” 这个问题,我们还可以通过执行下面的命令来指定 ip,从而避免掉该错误:

./jmeter-server -Djava.rmi.server.hostname=ip

问题 3:

jmeter-server 启动成功,但是在 master 上无法执行分布式测试。

我这边抛出的错误是:”No route to host“

这个问题是由防火墙引起的,也就是说,slave 上的防火墙没有关闭,此时,我们需要到 slave 上关掉防火墙。之后就可以正常运行了。关闭防火墙的方法多种,我这里特别记录下我自己红帽子 7 虚拟机的命令:

#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld

问题4:查看是否有多余进程

注意查看jmeter是否有多余的进程  ps -aux| grep jmeter 查看,杀掉进程的话kill -9   pid

posted @   Rain009  阅读(486)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示