JMeter性能测试实战、分布式性能测试

通过远程运行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(命令行)客户端开始在远程服务器上进行测试。执行此操作的命令是:

 

上一篇:Linux环境下进行分布式压测踩过的坑


下一篇:使用maven导入module时,报java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must