如果你的JMeter客户机不能进行属性,来模拟 足够的用户强调您的服务器或在网络水平是有限的,存在一个选项来控制多个远程JMeter 引擎从一个JMeter客户机。 通过运行JMeter远程,你可以复制 一个测试在许多低端电脑,从而模拟服务器上的负载更大。 一个 JMeter的实例客户端可以控制任意数量的远程JMeter实例,并收集 所有的数据。 这提供了以下功能:
- 测试样品的保存到本地计算机
- 管理多个JMeterEngines从一个机器
- 不需要复制测试计划每个服务器-客户端发送到服务器
然而,远程模式并使用更多的资源比独立运行相同数量的非gui测试。 如果使用了许多服务器实例,客户机JMeter可以成为重载,因为客户端网络连接。 这是提高了切换到剥夺模式(见下文),但你应该经常检查你的客户不是超载。
注意,虽然您可以执行JMeterEngine在您的应用程序 服务器,您需要注意这一事实,这将是增加处理 开销在应用服务器上,因此您的测试结果 有些污染。 推荐的方法是有一个或多个机器上 相同的以太网段配置运行您的应用程序服务器 JMeter引擎。 这将最小化网络测试的影响 结果而不影响应用程序服务器的性能 本身。
步骤0:配置节点
确保所有节点(客户机和服务器):
- 运行JMeter的完全相同的版本。
- 所有系统上使用相同的Java版本。 使用不同版本的Java可能工作但不鼓励。
如果测试使用任何数据文件, 请注意,这些都不是跨由客户机发送 确保这些在每个服务器上相应的目录 。 如果有必要你可以定义不同的值通过编辑属性 user.properties 或 system.properties 在每个服务器上的文件。 这些属性将会捡起当服务器启动和可能 测试计划中使用影响其行为(例如,连接到一个不同的远程服务器)。 或者使用不同的内容所使用的任何数据文件来完成测试 (例如,如果每个服务器必须使用独特的id,把这些数据文件)之间的
步骤1:启动服务器
运行JMeter远程节点,在所有机器上启动JMeter服务器组件你希望通过运行上运行 的 JMETER_HOME / bin / jmeter-server (unix)或JMETER_HOME / bin / jmeter-server.bat (windows)脚本。
注意,在每个节点上只能有一个JMeter服务器不同,除非使用RMI端口。
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 命令行选项而不是指定远程主机(s)使用。 这有同样的效果 - r 和 -Jremote_hosts = { }一旦 。 如。
jmeter -Rhost1,127.0.0.1,host2
如果您定义JMeter属性 server.exitaftertest = true 后退出,那么服务器将运行一个测试。 看到也 - x 标志(下面描述)
步骤3:从GUI客户机启动JMeter客户端检查配置
现在您已经准备好开始控制JMeter客户机。 微软视窗系统,启动客户端脚本” bin / jmeter.bat ”。 对于UNIX, 使用脚本” bin / jmeter”。 你会注意到Run菜单包含两个子菜单:“遥控起动”和“远程停止” (见图1)。这些菜单包含您在属性文件中设置客户端。 使用远程启动和停止的 正常的JMeter启动和停止的菜单项。
图1 -运行菜单
步骤3 b:启动JMeter从非gui客户机
GUI模式只能用于调试,作为一个更好的选择,你应该在远程服务器上启动测试(s)从非GUI客户机(命令行)。 命令就是:
jmeter -n -t script.jmx -r
或
jmeter -n -t script.jmx -R server1,server2,…
其他旗帜可能有用:
- -Gproperty =值
- 定义一个属性在所有服务器(可能出现不止一次)
- - x
- 退出远程服务器的测试。
第一个例子将开始测试在任何服务器上定义在JMeter属性 remote_hosts ;
第二个例子将定义 remote_hosts 从服务器列表中,然后开始测试在远程服务器上。
命令行客户端将退出当所有的远程服务器已停止。
手工设置
在某些情况下,jmeter-server脚本可能不会为你工作(如果您正在使用一个操作系统平台没有预期到的JMeter开发人员)。 下面是如何开始JMeter服务器(步骤1),更多的手动过程:
步骤1:启动RMI注册表
JMeter 2.3.1以来,JMeter的RMI注册表启动服务器,所以本节不适用在正常的情况下。 回到之前的行为,定义JMeter的财产server.rmi.create = false 在服务器主机系统 遵循下面的说明。
JMeter使用远程方法调用(RMI)作为远程通信机制。 因此,您需要 运行RMI注册应用程序(名为,“ rmiregistry ”)与JDK和位于”本 ” 目录中。 在运行之前 rmiregistry ,确保以下jar文件在你的系统类路径:
- JMETER_HOME / lib / ext / ApacheJMeter_core.jar
- JMETER_HOME / lib / jorphan.jar
- JMETER_HOME / lib / logkit-2.0.jar
的 rmiregistry某些JMeter应用程序需要访问类。 运行 rmiregistry 不带参数。 默认情况下, 应用程序听端口 1099年 。
步骤1 b:启动JMeter服务器
RMI注册应用程序运行后,启动JMeter服务器。 使用“ - s jmeter启动脚本”选项(“ jmeter - s ”)。
步骤2和3是相同的。
建议
JMeter / RMI需要从客户端到服务器的连接。 这将使用你选择端口,默认 1099年 。
JMeter / RMI还需要反向连接,以便从服务器返回的样本结果给客户端。
这将使用一个端口。
这个端口通过jmeter属性可以控制 client.rmi.localport 在 jmeter.properties 。
如果有防火墙或其他网络过滤器JMeter客户机和服务器之间, 您将需要确保他们通过设置允许连接。 如果有必要,使用监控软件展示交通生成。
如果你运行Suse Linux,这些建议可能会有帮助。 默认的安装可能会启用防火墙。 在这种情况下, 远程测试将不会正常工作。 下面的建议被谢尔盖十了。
如果你看到连接拒绝,打开调试通过以下选项。
rmiregistry -J-Dsun.rmi.log.debug=true \
-J-Dsun.rmi.server.exceptionTrace=true \
-J-Dsun.rmi.loader.logLevel=verbose \
-J-Dsun.rmi.dgc.logLevel=verbose \
-J-Dsun.rmi.transport.logLevel=verbose \
-J-Dsun.rmi.transport.tcp.logLevel=verbose \
JMeter 2.3.1以来,RMI注册中心服务器启动的;然而JMeter的选项仍然可以通过命令行。 例如:“ jmeter - s -Dsun.rmi.loader.logLevel =冗长 ”(即省略了 - j 前缀)。 或者可以定义的属性 system.properties 文件。
解决问题是消除回路 127.0.0.1 和 127.0.0.2 从 设置 。 发生了什么是 jmeter-server 不能连接到rmiregistry如果127.0.0.2 回送是不可用的。 使用以下设置来解决这个问题。
取代
`dirname $0`/jmeter -s "$@"
与
HOST="-Djava.rmi.server.hostname=[computer_name][computer_domain] \
-Djava.security.policy=`dirname $0`/[policy_file]" \
`dirname $0`/jmeter $HOST -s "$@"
还创建一个政策文件和添加 [computer_name][computer_domain] 行 设置 。
为了更好地支持使用RMI通信通道的ssh隧道 远程测试,因为JMeter 2.6:
- 一个新的属性” client.rmi.localport “可以设置为控制RemoteSampleListenerImpl使用RMI端口
- 支持SSH隧道的隧道RMI通信远程端点在本地机器上使用一个端口, 环回接口现在可以使用如果已指定直接使用Java系统属性 ” java.rmi.server.hostname ”参数。
使用不同的端口
默认情况下,JMeter使用标准RMI端口 1099年 。 可以改变这种情况。 对于这个工作成功, 所有需要同意如下:
- 在服务器上,开始 rmiregistry 使用新的端口号
- 在服务器上,开始JMeter的财产 server_port 定义
- 在客户端更新 remote_hosts 财产包括新的远程 主持人:港口 设置
Jmeter 2.1.1以来,jmeter-server脚本改变端口提供支持。 例如,假设您想要使用的端口 1664年 (也许 1099年 已经使用)。
在Windows上(在一个DOS框)
C:\JMETER> SET SERVER_PORT=1664
C:\JMETER> JMETER-SERVER [other options]
在Unix:
$ SERVER_PORT=1664 jmeter-server [other options]
(注意: 使用大写的环境变量)
在这两种情况下,脚本开始rmiregistry指定端口, 然后开始JMeter在服务器模式,定义了” server_port ”属性。
选择端口将登录服务器 jmeter.log 文件( rmiregistry 不创建一个日志文件)。
使用不同的样本发送者
听众在测试计划将结果发送回客户端JMeter将结果写入指定的文件 默认情况下,样品返回同步生成。 这可能会影响服务器的最大吞吐量测试;样本结果必须在线程可以发回 继续下去。 有一些JMeter属性可以设置为改变这种行为。
- 模式
- 样品发送模式违约 StrippedBatch 因为2.9。 这应该是在客户机上设置节点。
- 标准
- 尽快发送样品同步生成
- 持有
- 数组中保存样品,直到运行结束。 这可能在服务器上使用了大量的内存,气馁。
- DiskStore
- (在样本存储在磁盘文件 java.io.temp ),直到运行结束。 JVM退出的序列化数据文件被删除。
- StrippedDiskStore
- 删除responseData成功的样本中,并使用DiskStore发送者发送它们。
- 批处理
- 时发送保存样本计数( num_sample_threshold )和时间( time_threshold )超过一个阈值, 此时样品发送同步。 可以在服务器上配置的阈值使用以下属性:
- num_sample_threshold
- 样品的数量积累,违约 100年
- time_threshold
- 时间阈值,默认60000毫秒= 60秒
看到也中模式,下面描述。
- 统计
- 发送一个总结样本当数或时间超过一个阈值。 样品是由线程组名称和总结样品标签。 以下字段是积累:
- 运行时间
- 延迟
- 字节
- 样品数
- 错误数
其他字段,不同样品丢失。
- 剥夺了
- 删除responseData从成功中样本
- StrippedBatch
- 删除responseData成功的样本中,并使用批量发送方发送它们。
- 中
- 样品暂时存储在一个本地队列。 一个单独的工作线程发送样品。 这允许测试线程继续没有等待结果发送回客户端。 然而,如果样品正在形成的速度比他们可以发送,队列最终将填满, 和取样器线程将阻塞,直到一些样品可以从队列中排水。 这种模式有助于消除峰值在样本的一代。 队列的大小可以调节通过设置JMeter的财产asynch.batch.queue.size (默认 100年 在服务器节点)。
- StrippedAsynch
- 删除responseData成功的样本中,并使用异步发送方发送它们。
- 自定义实现
- 模式参数设置为您的自定义样本发送方类名。 必须实现这个接口 SampleSender 构造函数带有一个单 类型的参数RemoteSampleListener 。
这并不是一个问题,总有一个更有效的方法来实现这个功能。
适用于以下属性 批处理 和 统计 模式:
- num_sample_threshold
- 一批的样品数量(默认 100年 )
- time_threshold
- 等待的毫秒数(默认60秒)
处理节点失败的开始
为大规模的测试有可能将部分远程服务器不可用。 例如,当您使用自动化脚本分配许多云机器和使用它们作为发电机, 要求机器可能会失败的一些引导因为云的问题。 因为JMeter 2.13有新的属性来控制这种行为。
首先你可能希望重试失败节点的初始化尝试希望稍微推迟他们的引导。 要启用重试,你应该设置 client.tries 房地产总数量的连接尝试。 默认情况下它只有一个尝试。 控制重试延迟,设置 client.retries_delay 财产 之间的毫秒数睡觉尝试。
最后,您可能还想要运行的测试与发电机成功初始化和跳过失败节点。 启用,设置 client.continue_on_fail = true 财产。