参考:http://jmeter.apache.org/usermanual/remote-test.html

http://jmeter.apache.org/usermanual/jmeter_distributed_testing_step_by_step.pdf

背景

如果Jmeter客户端的机器性能不够好,导致不能加压足够的用户数到服务器,或者jmeter客户端机器所在的网络受限,这个时候我们就可以使用单个Jmeter客户端来远程控制多个jmeter服务器。

通过远程跑Jmeter,我们可以在很多个低端计算机上复制测试,然后对被测服务器产生一个很大的压力。理论上Jmeter客户端可以控制任意数量的远程Jmeter,并通过它们收集所有数据。

包括如下特点:

  • 保存测试采样数据到本地机器
  • 用单个机器管理多个jmeter引擎
  • 不需要拷贝test plan到每个服务器--客户端会给所有服务器发送test plan

多个远程服务器会跑相同的test Plan。Jmeter不会在服务器间分配负载,也就是说每一个服务器跑完整的Test Plan。所以假设我们设置了1000个thread,并且我们有6台jmeter服务器,我们最终会注入6000个Thread。

然而,远程模式会比单独跑相同数量的非GUI测试使用更多的资源。如果使用很多个远程jmeter服务器,可能会导致客户端jmeter过载,或者网络连接发生阻塞。

需要注意的是,如果我们在应用服务器上执行Jmeter引擎,会加重应用服务器的负担,从而造成测试结果被污染。推荐将应用服务器和Jmeter引擎配置在相同的以太网段内。这样既不会对应用服务器造成性能负担,也可以最小化网络对测试结果的影响。

工作方式

使用单个Jmeter客户端来远程控制多个jmeter服务器。

如上图, 192.168.0.2 就是JMeter客户端(主机器),控制其他的服务器(从机器)。

可以这么说:

Master 主机器:跑JMeter的机器,由该机器控制其他测试机器。

Slave 从机器:被主机器控制的机器,是真正对被测系统产生压力的机器。

Target 被测系统:被测试的系统所在机器。也就是被压的机器。

可以看到下图中,一个Master主机器控制多台Slave从机器,由从机器对被测系统施压,进行测试。

0. 配置节点

确保所有的节点(主机器和从机器):

  • 使用相同版本的JMeter 以及 Java(使用不同版本的可能会带来问题)
  • 系统关闭防火墙,或者开放特定端口
  • 主机器和所有从机器最好在同一个子网内

如果测试使用数据文件,注意jmeter主机器不会发送这些数据文件到从机器,所以要确保每台从机器都保存了这些文件,并且路径正确。

如果有必要,我们可以编辑user.properties以及system.properties,给每台从机器设置不同的属性。当从机器启动,这些属性可能在 Test Plan中被使用,从而影响它的表现。

不同的从机器可以使用不同的数据文件。比如,如果每台从机器使用独一无二的ID,我们可以以此来使用不同的数据文件。

1. 启动从机器

在所有jmeter从机器上执行脚本:

  • JMETER_HOME/bin/jmeter-server (unix环境)
  • JMETER_HOME/bin/jmeter-server.bat (windows环境)

请注意,每个远程节点上只能有一个Jmeter从机器,除非我们使用不同的RMI端口。

2. 在主机器属性文件中添加服务器IP地址

打开主机器的属性文件 JMETER_HOME/bin/jmeter.properties,编辑 remote_hosts属性,添加远程Jmeter从机器的IP地址。多个IP地址之间以逗号分隔。

# Remote Hosts - comma delimited
remote_hosts=127.0.0.1
#remote_hosts=localhost:1099,localhost:2010

3. GUI方式启动主机器

启动主机器的jmeter,选好Test Plan,点击 Run –> Remote Start,我们会看到菜单下列出所有配置的远程的从机器的IP。选择

一个机器就可以在某个从机器上跑 Test Plan 。如果想在所有从机器上跑 Test Plan ,点击 Remote Start All即可。

4. 以命令行方式启动客户端

GUI模式适合用来debug,真正测试时最好使用命令行方式。

所有远程从机器停止运行测试后,命令行就会退出。

有两种命令行启动方式。

方式一:

jmeter -n -t script.jmx -r

这里直接在 jmeter.properties 中 remote_hosts定义的所有从机器上执行测试。

方式二:

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

这里先定义远程从机器,然后在远程机器上启动测试。

其他

1)Jmeter使用的端口号

Jmeter/RMI需要建立一个从主机器到从机器的连接,默认使用1099端口。

Jmeter/RMI也需要建立一个从从机器到主机器的连接,目的是从从机器返回测试采样结果给主机器。这个端口一般是一个更高的端口号。这个端口号可以通过 jmeter.properties的 client.rmi.localport 属性来配置, 默认该值是0,表示端口号随机分配。

# Parameter that controls the RMI port used by the RemoteSampleListenerImpl (The Controler)
# Default value is which means port is randomly assigned
# You may need to open Firewall port on the Controller machine
#client.rmi.localport=

如果在主机器和从机器之间有防火墙或者其他的网络过滤器,我们需要保证它们允许上面连接的建立。

2)更换使用的端口号

默认情况下,Jmeter使用标准RMI端口号1099。参见 jmeter.properties 中的配置。

# RMI port to be used by the server (must start rmiregistry with same port)
#server_port=

如果1099号被占用,想更换一个端口号,分为两步

步骤一:更新 SERVER_PORT值,然后重新启动 Jmeter从机器。比如更换为1664端口。

windows

C:\JMETER> SET SERVER_PORT=
C:\JMETER> JMETER-SERVER [other options]

Unix

$ SERVER_PORT= jmeter-server [other options]

步骤二:主机器重新设置remote_hosts

打开主机器 jmeter.properties文件,编辑 remote_hosts 值类似 server:1664

3)使用其他的采样发送方式

测试计划中的 Listener 会把它们的结果返回给jmeter主机器,jmeter主机器会将结果写入到特定文件。采样结果产生之后,会同步发送回去。这就会影响服务器测试的最大throughput值。这种情况下我们就可以改变jmeter的采样发送方式。

打开jmeter.properties,可以看到备选的mode有多种,比如Standard、Hold、DiskStore、Batch等等。

默认使用的是 StrippedBatch模式。该模式会移除成功的采样返回的responseData,然后使用Batch方式来发送。

各种模式具体的区别参见:http://jmeter.apache.org/usermanual/remote-test.html#sendermode

# Since JMeter 2.9, default is MODE_STRIPPED_BATCH, which returns samples in
# batch mode (every samples or every minute by default)
# Note also that MODE_STRIPPED_BATCH strips response data from SampleResult, so if you need it change to
# another mode
# Hold retains samples until end of test (may need lots of memory)
# Batch returns samples in batches
# Statistical returns sample summary statistics
# hold_samples was originally defined as a separate property,
# but can now also be defined using mode=Hold
# mode can also be the class name of an implementation of org.apache.jmeter.samplers.SampleSender
#mode=Standard
#mode=Batch
#mode=Hold
#mode=Statistical
#Set to true to key statistical samples on threadName rather than threadGroup
#key_on_threadname=false
#mode=Stripped
#mode=StrippedBatch
#mode=org.example.load.MySampleSender
#
#num_sample_threshold=
# Value is in milliseconds
#time_threshold=
#
# Asynchronous sender; uses a queue and background worker process to return the samples
#mode=Asynch
# default queue size
#asynch.batch.queue.size=
# Same as Asynch but strips response data from SampleResult
#mode=StrippedAsynch
#
# DiskStore: as for Hold mode, but serialises the samples to disk, rather than saving in memory
#mode=DiskStore
# Same as DiskStore but strips response data from SampleResult
#mode=StrippedDiskStore
# Note: the mode is currently resolved on the client;
# other properties (e.g. time_threshold) are resolved on the server.

4)处理启动失败的节点

下面有3个属性。

client.tries :定义新建远程引擎的尝试次数。默认值为1,表示仅尝试一次。

client.retries_delay :两次尝试之间的延迟时间。单位为 milliseconds。

client.continue_on_fail:值为 true 表示忽略新建失败的节点,并继续在新建成功的节点上执行测试。默认为false,表示尝试新建之后,只要存在新建失败的节点,测试就会失败。

# When distributed test is starting, there may be several attempts to initialize
# remote engines. By default, only single try is made. Increase following property
# to make it retry for additional times
#client.tries= # If there is initialization retries, following property sets delay between attempts
#client.retries_delay= # When all initialization tries was made, test will fail if some remote engines are failed
# Set following property to true to ignore failed nodes and proceed with test
#client.continue_on_fail=false

JMeter 七:远程测试的更多相关文章

  1. jmeter 远程测试

    如果你的JMeter客户机不能进行属性,来模拟 足够的用户强调您的服务器或在网络水平是有限的,存在一个选项来控制多个远程JMeter 引擎从一个JMeter客户机. 通过运行JMeter远程,你可以复 ...

  2. Jmeter远程测试

    11.3 详解JMeter远程测试(1) 2012-04-09 09:14 温素剑 电子工业出版社 字号:T | T 综合评级: 想读(7)  在读(2)  已读(0)   品书斋鉴(0)   已有9 ...

  3. 【转】JMeter远程测试

    详解JMeter远程测试(1) 如果运行JMeter客户端的机器性能不能满足测试需要,那么测试人员可以通过单个JMeter GUI客户端来控制多个远程JMeter服务器,以便对服务器进行压力测试,模拟 ...

  4. 使用JMeter进行负载测试——终极指南

    这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 JMeter的实现方式以及采用的技术 安 ...

  5. 使用JMeter做压力测试

    使用JMeter做压力测试 1.下载Jmeter 地址:http://jmeter.apache.org/download_jmeter.cgi 2.启动jmeter 运行bin/jmeter.bat ...

  6. jmeter分布式压力测试实践+登录为例

    1.一张分布式压力的图解,如下 准备: 1.两台slave 2.一个master 3.待测目标地址 http://XXX 准备环境:linux环境,master如果可以最好有可视化电脑界面,便于jmx ...

  7. 第八篇:Jmeter的分布式测试

    一: 由于Jmeter本身的瓶颈,当模拟数以千计的用户并发的时候,使用单台机器会有些力不从心,甚至还会引起Java内存溢出的错误,要解决这个问题,就要使用分布式测试,运行多台机器,也就是所谓的Agen ...

  8. 【转】使用JMeter进行负载测试——终极指南

    使用JMeter进行负载测试——终极指南 这篇教程讨论的是JMeter,它是一款基于Java的.集合了几个应用程序.具有特定用途的负载和性能测试工具. 本篇主要涉及的内容: 解释一下JMeter的用途 ...

  9. 如何使用Jmeter进行压力测试

    Jmeter做压力测试的操作:Jmeter不仅可以做接口测试,还可以做压力测试,下面介绍介绍如何jmeter进行简单地压力测试.具体步骤如下: 第一步:添加请求,这里不介绍具体步骤,详见(https: ...

  10. linux环境下使用jmeter进行压力测试

    linux环境下使用jmeter进行压力测试 linux环境下使用就meter进行压力测试: linux环境部署: 在Linux服务器先安装jdk: 2.以jdk-8u172-linux-x64.ta ...

随机推荐

  1. 【转载】AsyncTask源码分析

    原文地址:https://github.com/white37/AndroidSdkSourceAnalysis/blob/master/article/AsyncTask%E5%92%8CAsync ...

  2. Thinkphp模板中函数的使用

    1.在模板中使用php函数 在thinkphp的html中,我们经常会遇到一些变量难以直接从php控制端直接处理,这些变量只有在模板中循环输出的时候处理比较合适,这个时候,我们就要在模板中使用函数 1 ...

  3. 最近公共祖先LCA(前置知识)

    1.前言 最近公共祖先(Least Common Ancestors),简称LCA,是由Tarjan教授(对,又是他)提出的一种在有根树中,找出某两个结点u和v最近的公共祖先问题. 2.什么是最近公共 ...

  4. 【欧拉函数】BZOJ2818-GCD

    怎么漏了这一道……本来想要水一水,结果忘记了φ[1]=1,果然要滚一遍前面的知识…… #include<iostream> #include<cstdio> #include& ...

  5. python基础之包与logging模块

    包 1.什么是包? 包是模块的一种形式,包的本质就是一个含有__init__.py文件的文件夹 2.为什么要有包? 提高程序的结构性和可维护性 3.如何使用包? 导入包就是在导包下的__init__. ...

  6. Java并发(六):volatile的实现原理

    synchronized是一个重量级的锁,volatile通常被比喻成轻量级的synchronized volatile是一个变量修饰符,只能用来修饰变量. volatile写:当写一个volatil ...

  7. 邮件发送javamail

    写在前面: 最近要将dms系统原始发邮件的功能(调用的webservice)改变成使用smtp服务来发送邮件(使用javamail来发送),这里简单记录下,方便日后有用到,直接拿来用即可. 首先导入需 ...

  8. js的执行环境及作用域

    主要的是执行环境和作用域链. 执行环境 执行环境定义了变量或函数有权访问的其他数据,每个函数都有一个执行环境,每个执行环境都有一个与之关联的变量对象,环境中定义的所有变量和函数都保存在这个变量对象中, ...

  9. [转] hibernate Mysql 自增长 注解配置,表无关联的注解方式关联查询

    不同数据库 自增长ID配置 正对不同的数据库可以同时使用         @Id         @GeneratedValue(strategy = GenerationType.AUTO) 2 针 ...

  10. MYSQL复习笔记6-字符集

    Date: 20100101 Auth: Jin 参考http://blog.sina.com.cn/s/blog_9707fac301016wxm.html 一.字符集介绍 计算机只处理二进制代码 ...