背景

如果您的JMeter客户端计算机无法使用性能方面,要模拟足够的用户来增强压力或受限于网络级别,则可以选择从单个JMeter客户端控制多个远程JMeter引擎。通过远程运行JMeter,您可以跨许多低端计算机复制测试,从而模拟服务器上的较大负载。JMeter客户端的一个实例可以控制任意数量的远程JMeter实例,并从中收集所有数据。这提供以下功能:

  • 将测试samples保存到本地机器
  • 从单个机器管理多个JMeter Engines
  • 无需将测试计划复制到每个服务器 - 客户端将其发送到所有服务器

注意:所有服务器都运行相同的测试计划。JMeter不会在服务器之间分配负载,每个都运行完整的测试计划。所以如果你设置1000个线程并且有6个JMeter服务器,你最终会注入6000个线程。

jmeter分布式原理

jmeter_server_agent

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

部署及配置

要求

  • 服务器(slave)与客户端(controller)保持同版本
  • jdk最好也是同一个大版本,如jdk1.8

服务端配置

  • jdk安装

此处忽略50字。。。目前jdk可用1.8

  • 配置

解压jmeter,进入jmeter/bin,修改jmeter.properties

# 去掉server_port前面的#号,放开注释,定义端口,不能被占用
server_port=1099
# 去掉server.rmi.localport前面的#号,放开注释,端口需要和上面的server_port配置成一样
server.rmi.localport=1099
# 去掉server.rmi.ssl.disable前面的#号,并把后面的值改成true,即忽略ssl
server.rmi.ssl.disable=true

客户端配置

  • jdk安装

此处忽略50字。。。目前jdk可用1.8,大版本需要和服务端一致

  • 配置

解压jmeter,版本号要和服务端一样,进入jmeter/bin,修改jmeter.properties

# 修改remote_hosts,后面加上服务端的ip地址,如果服务端ip为10.1.1.5
# 如果服务端端口不是1099,则需要在ip后面加上服务端的端口号,如下
remote_hosts=127.0.0.1,10.1.1.5:1099

启动

  • 服务端
# 进入jmeter/bin
./jmeter-server 
  • 客户端
# 用no-gui方式
jmeter -R 10.1.1.5 -n -t xxx.jmx -l xxx.tl -e -o ./xxx
# 用gui方式
启动jmeter.bat,编写好脚本,点击 运行-启动运行选择服务端的ip即可