通过远程运行JMeter,您可以跨多台低端计算机复制测试,从而模拟服务器上的更大负载。JMeter客户端的一个实例可以控制任意数量的远程JMeter实例,并从中收集所有数据。
将测试样本保存到本地机器
从一台机器管理多个JMeter服务
无需将测试计划复制到每个服务器 - 客户端将其发送到所有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'
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
然后复制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(命令行)客户端开始在远程服务器上进行测试。执行此操作的命令是: