【JMeter】分布式远程启动

在压测需求较大并发量时,如1000以上,但是单台客户端难以实现,因此需要多台客户端并行,并且能同步控制

jmeter的分布式控制

这里写图片描述

  • 客户端机器作为一个控制器controller,控制多台slave机器的操作
  • controller通过GUI界面启动slave机器,将jmeter压测发送给每台启动的slave
  • slave获得脚本后开始执行,slave本地不需预先存储脚本
  • 各台slave执行完成后,将结果传回给controller,controller收集整合显示

远程服务器(slave)配置

远程服务器(slave)需要安装jmeter和jdk,最好与客户端(controller)保持相同版本

在远程服务器(slave)的jmeter的bin目录下执行jmeter-server.bat 文件

执行后:

这里写图片描述

Could not find ApacheJmeter_core.jar...
...Trying JMETER_HOME=..

JMETER_HOME 添加到环境变量中,依旧有此提示

客户端(controller)配置

在客户端上要保证执行命令能发送到服务器,因此需配置客户端远程的ip地址和port

在客户端jmeter安装目录的bin目录下,修改配置文件 jmeter.properties

默认的remote_hosts 的值:

这里写图片描述

修改remote_hosts 的值:

# Remote Hosts - comma delimited
remote_hosts=127.0.0.1,172.18.152.16,172.18.152.12,172.16.43.80

#remote_hosts=localhost:1099,localhost:2010

即添加172.18.152.16,172.18.152.12,172.16.43.80 三个远程服务器

若不添加端口即为默认的1029端口

完成配置后打开客户端jmeter的GUI界面,运行->远程启动即可看到配置的远程服务器IP

这里写图片描述

可选择其中一个远程服务器执行或者所有远程服务器同步执行

先选择其中一个服务器实验一下,执行后远程服务器日志:

这里写图片描述

但是执行结束后客户端并没有任何的响应,查看客户端的log

2017/01/17 21:54:23 ERROR - jmeter.samplers.RemoteTestListenerWrapper:  java.rmi.ConnectIOException: Exception creating connection to: 169.254.80.80; nested exception is: 
	java.net.SocketException: Network is unreachable: connect
	at sun.rmi.transport.tcp.TCPEndpoint.newSocket(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.createConnection(Unknown Source)
	at sun.rmi.transport.tcp.TCPChannel.newConnection(Unknown Source)
	at sun.rmi.server.UnicastRef.invoke(Unknown Source)
	at java.rmi.server.RemoteObjectInvocationHandler.invokeRemoteMethod(Unknown Source)
	at java.rmi.server.RemoteObjectInvocationHandler.invoke(Unknown Source)
	at com.sun.proxy.$Proxy1.testEnded(Unknown Source)
	at org.apache.jmeter.samplers.RemoteTestListenerWrapper.testEnded(RemoteTestListenerWrapper.java:79)
	at org.apache.jmeter.engine.StandardJMeterEngine.notifyTestListenersOfEnd(StandardJMeterEngine.java:218)
	at org.apache.jmeter.engine.StandardJMeterEngine.run(StandardJMeterEngine.java:437)
	at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Network is unreachable: connect
	at java.net.DualStackPlainSocketImpl.connect0(Native Method)
	at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
	at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
	at java.net.PlainSocketImpl.connect(Unknown Source)
	at java.net.SocksSocketImpl.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.connect(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at java.net.Socket.<init>(Unknown Source)
	at sun.rmi.transport.proxy.RMIDirectSocketFactory.createSocket(Unknown Source)
	at sun.rmi.transport.proxy.RMIMasterSocketFactory.createSocket(Unknown Source)
	... 11 more

尝试后解决不了此问题

换一台机器做为客户端,同样的配置过程,运行后发现,OK!

刚刚执行的是试验脚本,接下来执行测试脚本,看是否OK!执行后发现并没有任何的执行结果,发现

这里写图片描述

依赖的地址是绝对路径,应将路径改为相对路径

将该.csv文件放在客户端jmeter的bin目录下,将依赖Filename改为相对路径 userInfo.cvs ,开始修改的时候,以为相对路径为 %JMETER_HOME%bin/userInfo.cvs ,并配置了JMETER_HOME 环境变量发现仍会出现问题,故使用相对路径 userInfo.cvs

配置好后,将userInfo.cvs 文件同样放在服务端肉机的Jmeter的bin目录下即可

这样发现如果每个肉鸡都要不同的userInfo.cvs 文件时,就特别麻烦,得往每台肉鸡拷不同的文件

如果在云端搭建一个服务器,每台肉鸡启动 jmeter-server 服务连接云端服务器,肉鸡向云端服务器上报本地IP和MAC地址,主机通过给云端服务器给每台肉鸡分别发送文件,这样极大提高效率

这里写图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

sysu_lluozh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值