Jmeter分布式性能测试详解(4)分布式远程测试

通过远程运行JMeter,您可以跨多台低端计算机复制测试,从而模拟服务器上的更大负载。JMeter客户端的一个实例可以控制任意数量的远程JMeter实例,并从中收集所有数据。

  1. 将测试样本保存到本地机器
  2. 从一台机器管理多个JMeter服务
  3. 无需将测试计划复制到每个服务器 - 客户端将其发送到所有jmete服务器进行测试

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

分布式测试有一些基本的限制。
没有代理服务器,RMI无法通过子网进行通信; 因此JMeter也无法使用代理。
从版本2.9开始,JMeter会将所有测试结果剥离响应数据到控制台,这样可以减少对网络IO的影响。确保您监控您的网络流量,以免流量造成争用。
运行在2-3 GHz CPU(最新CPU)上的单个JMeter客户端可以处理1000-2000个线程,但具体还取决于测试类型:http、ftp。

分布测试原理图:
这里写图片描述

这里写图片描述

配置节点

确保所有节点(客户端和服务器):
1、正在运行完全相同的JMeter版本。
2、在所有系统上使用相同版本的Java。使用不同版本的Java可能会工作但不鼓励。
3、拥有RMI over SSL的有效密钥库,或者禁用了SSL。

设置SSL

自JMeter 4.0以来,RMI的默认传输机制将使用SSL。SSL需要密钥和证书才能工作。不使用ssl将存在安全漏洞。

Windows系统(称为bin / create-rmi-keystore.bat)
Unix系统(称为bin / create-rmi-keystore.sh)。
执行上述脚本将生产密钥,该密钥有效期为七天,默认密码值为’ changeit ’
例如设置时候:

$ cd jmeter/bin
$ ./create-rmi-keystore.sh
What is your first and last name?
  [Unknown]:  rmi
What is the name of your organizational unit?
  [Unknown]:  My unit name
What is the name of your organization?
  [Unknown]:  My organisation name
What is the name of your City or Locality?
  [Unknown]:  Your City
What is the name of your State or Province?
  [Unknown]:  Your State
What is the two-letter country code for this unit?
  [Unknown]:  XY
Is CN=rmi, OU=My unit name, O=My organisation name, L=Your City, ST=Your State, C=XY correct?
  [no]:  yes

Copy the generated rmi_keystore.jks to jmeter/bin folder or reference it in property 'server.rmi.ssl.keystore.file'

然后复制generated rmi_keystore.jks到bin目录然后在jmeter.propertis中设置

server.rmi.ssl.keystore.file=generated rmi_keystore.jks //引用该SSL密钥

对进行分布测试所有jmeter服务机器,都需要通过进行项目配置。生成一个密钥后,复制到其他jmeter 客户机、服务机进行相应配置。

JMeter / RMI需要从客户端到服务器的连接。这将使用您选择的端口,默认值为1099。
JMeter / RMI还需要反向连接才能将服务器的样本结果返回给客户端。
这将使用高编号的端口。
此端口可以通过称为JMeter的属性来控制client.rmi.localport在jmeter.properties。
如果JMeter客户端和服务器之间有任何防火墙或其他网络过滤器,则需要确保它们已设置为允许通过连接。如有必要,请使用监控软件来显示正在生成的流量。

第1步:启动服务器

要在远程节点中运行JMeter,通过运行JMETER_HOME / bin / jmeter-server(unix)或JMETER_HOME / bin / jmeter-server.bat(windows)脚本,在希望运行的所有机器上启动JMeter服务器组件。

请注意,除非使用不同的RMI端口,否则每个节点上只能有一个JMeter服务器。

从JMeter 2.3.1开始,JMeter服务器应用程序自己启动RMI注册表; 没有必要单独启动RMI注册表。要恢复到以前的行为,请定义JMeter属性

server.rmi.create = FALSE
在服务器主机系统上。
默认情况下,RMI为JMeter服务器引擎使用动态端口。这可能会导致防火墙出现问题,因此您可以定义JMeter属性server.rmi.localport 来控制此端口号。如果这不是零,它将被用作服务器引擎的本地端口号。

第2步:将服务器IP添加到客户端的“属性文件”中

在控制的JMeter机器上编辑属性文件。在JMETER_HOME / bin / jmeter.properties中,找到名为“ remote_hosts ” 的属性,并添加正在运行的JMeter服务器IP地址的值。可以添加多个这样的服务器,逗号分隔。

请注意,您可以使用-R 命令行选项 来指定要使用的远程主机。这与使用-r和-Jremote_hosts = {serverlist}具有相同的效果。例如

jmeter -Rhost1,127.0.0.1,host2
如果您定义了JMeter属性server.exitaftertest = true,那么服务器将在运行单个测试后退出。
也可以通过客户端远程启动测试命令属性 -X 将在运行单个测试后退出。

步骤3a:从GUI客户端启动JMeter客户端以检查配置

现在您已准备好启动控制的JMeter客户端。对于MS-Windows,使用脚本“ bin / jmeter.bat ” 启动客户端。对于UNIX,使用脚本“ bin / jmeter ”。您会注意到Run菜单包含两个新的子菜单:“Remote Start”和“Remote Stop”(见图1)。这些菜单包含您在属性文件中设置的客户端。使用远程启动和停止,而不是普通的JMeter启动和停止菜单项。

步骤3b:从非GUI客户端启动JMeter

GUI模式只能用于调试,作为更好的选择,您应该从非GUI(命令行)客户端开始在远程服务器上进行测试。执行此操作的命令是:

jmeter -n -t script.jmx -r  //在JMeter属性remote_hosts中定义的任何服务器上开始测试; 

要么

jmeter -n -t script.jmx -R server1,server2,... //

其他可能有用的设置:
-Gproperty =val 指定发送所有jmeter测试服务器中一个属性(可能会出现多次)
-X 测试结束时关闭远程服务器。

所有远程服务器都测试完成后,命令行客户端才会正常测试退出。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值