【Jmeter】分布式远程启动

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lluozh2015/article/details/54587236

在压测需求较大并发量时,如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地址,主机通过给云端服务器给每台肉鸡分别发送文件,这样极大提高效率

这里写图片描述

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页