在 AWS 中设置 JMeter 进行分布式测试,但存在连接问题

2024-01-07

我必须使用 JMeter 进行分布式测试。目标是让 AWS 中由一台本地服务器控制的多台远程服务器向 AWS 中的另一台服务器发送文件下载请求。

如何在AWS中设置不同的服务器?
我如何远程连接到他们?

有人可以提供一些有关如何操作的分步说明吗?
我已经尝试了几种方法,但不断遇到网络连接问题。


我们有类似的任务,也遇到了很多问题。以下是整个过程的详细信息以及我们为解决遇到的问题所做的工作。希望能帮助到你。

我们需要从位于世界不同地区的 5 台服务器发送请求。因此,我们在 AWS 中启动了 5 个微型实例,每个实例位于不同的区域。我们选择的区域在地理上尽可能分开。

远程(服务器)JMeters 配置

以下是我们如何设置每个实例。

  1. 安装的java:

    $ sudo apt-get update
    $ sudo apt-get install default-jre 
    
  2. 安装的JMeter:

    $ mkdir jmeter
    $ cd jmeter;
    $ wget ftp://apache.mirrors.pair.com//jmeter/binaries/apache-jmeter-2.9.tgz
    $ gunzip apache-jmeter-2.9.tgz;tar xvf apache-jmeter-2.9.tar
    
  3. 编辑了jmeter.properties文件在/binJMeter 安装的文件夹并取消注释包含以下内容的行server.rmi.localport环境。我们将端口更改为50000。

    server.rmi.localport=50000
    
  4. 启动 JMeter 服务器。确保服务器报告侦听的地址和端口正确。

    $ cd ~/jmeter/apache-jmeter-2.9/bin
    $ vi jmeter-server
    

本地(客户端)JMeter 配置

然后我们设置 JMeter 在本地客户端计算机上的这些实例上远程运行测试:

  • 确保使用与服务器上运行的 JMeter 版本相同的版本。如上所述安装 Java 和 JMeter。
  • 通过编辑启用远程测试jmeter.properties可以在以下位置找到的文件binJMeter 安装的文件夹。参数remote_hosts需要使用我们连接的远程服务器的公共 DNS 进行设置。
  • remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x

现在,我们可以告诉客户端 JMeter 实例在任何或所有指定的远程服务器上运行测试。

问题和解决方案

以下是我们遇到的问题以及解决方法:

  1. 客户端失败并显示:

    错误 - jmeter.engine.ClientJMeterEngine:java.rmi.ConnectException:连接 - 拒绝主机:127.0.0.1

    这是因为由于 Amazon NAT,服务器主机返回私有 IP 地址作为其地址。 我们通过设置参数解决了这个问题RMI_HOST_DEF认为/usr/local/jmeter/bin/jmeter-server脚本包括启动服务器:

    RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx
    

    现在,AWS实例返回了服务器的外部IP,我们可以开始测试了。

  2. 当服务器节点尝试返回结果并尝试连接客户端时,服务器尝试连接我本地机器的外部IP地址。但它引发了连接拒绝错误:

    2013/05/16 12:23:37 错误 - jmeter.samplers.RemoteListenerWrapper:testStarted(主机)java.rmi.ConnectException:连接拒绝主机:xxx.xxx.xxx.xx;

    我们通过在客户端设置反向隧道解决了这个问题。

    • 首先,我们编辑了jmeter.properties文件在/binJMeter 安装的文件夹并取消注释包含以下内容的行client.rmi.localport环境。我们将端口更改为60000:

      client.rmi.localport=60000
      
    • 然后我们使用 SSH 连接到每台服务器,并在客户端上设置到端口 60000 的反向隧道。

      $ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 [email protected] /cdn-cgi/l/email-protection
      

    我们保持每个会话打开,因为 JMeter 服务器需要能够将测试结果传递给客户端。

    • 然后我们设置JVM_ARGS客户端的环境变量,在jmeter.sh文件在/bin folder:

      export JVM_ARGS="-Djava.rmi.server.hostname=localhost"
      

    通过这样做,JMeter 将告诉服务器连接到localhost:60000交付他们的成果。这最终会通过隧道返回给客户端。

  3. 闲置一段时间后,与服务器的 SSH 连接不断断开。为了防止这种情况发生,我们向每个设置的 SSH 隧道添加了一个参数,指示客户端在向服务器发送空数据包以保持连接活动之前等待 60 秒:

    $ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 [email protected] /cdn-cgi/l/email-protection
    

(.ssh/config所有必需的 SSH 设置的版本:

 Host 54.x.x.x
   HostName 54.x.x.x
   Port 22
   User ubuntu
   ServerAliveInterval 60
   RemoteForward 127.0.0.1:60000 127.0.0.1:60000
   IdentityFile  ~/.ssh/54-x-x-x.us-east.pem
   IdentitiesOnly yes

只需使用ssh 54.x.x.x设置完后。 )

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 AWS 中设置 JMeter 进行分布式测试,但存在连接问题 的相关文章

随机推荐

  • UITableViewCell 带有操作的按钮

    您好 我有一个自定义 UITableViewCell 带有三个按钮来处理购物车功能 加号 减号和删除按钮 我需要知道哪个单元格已被触摸 我已经尝试使用 标签解决方案 但由于细胞的生命周期 它不起作用 谁能帮我找到解决方案吗 提前致谢 我使用
  • 为什么我收到错误“MyActivity 不是封闭类?”

    我有一个 libgdx 程序 它以以下类开头 public class MyActivity extends AndroidApplication implements IActivityRequestHandler 我需要有一个Activ
  • Vuex axios调用无法处理422响应

    我正在尝试处理来自 API 的 422 响应 以防在进行异步 Axios 调用时数据无效 在组件中 我有一个类似的方法 async saveChanges this isSaving true await this store dispat
  • javax.imageio.IIOException:无法从 URL 获取输入流!

    我用java代码编写了一段代码来保存指定链接中的图像 它大部分工作正常 但有时它会抛出异常 即 javax imageio IIOException 无法从 URL 获取输入流 在 javax imageio ImageIO read Im
  • MySQL Select 和 IF() 语句

    我对 MySQL 有点陌生 我需要帮助 我有一张桌子Invoices和一张桌子Payments 我无法生成显示所有已支付发票的报告In Full or a Partial Payment已于 2019 年 12 月 31 日收到 一张发票可
  • OpenCL 内核未矢量化

    我正在尝试构建一个内核来进行并行字符串搜索 为此 我倾向于使用有限状态机 fsm 的转换表位于内核参数状态中 代码 kernel void Find constant char text const int offset const int
  • java:关闭子进程std流?

    来自 javadocjava lang Process http download oracle com javase 1 5 0 docs api java lang Process html 创建进程的方法可能不适用于某些本机平台上的特
  • scapy中sniff函数的过滤器无法正常工作

    看来filter of sniff功能无法正常工作 我正在使用以下过滤器执行嗅探 a sniff count 1 filter tcp and host 192 168 10 55 and port 14010 但有时sniff抓住一个UD
  • 在 Heroku 上部署时找不到模块错误

    我正在尝试将 Github 上的应用程序部署到 Heroku 但出现错误 src Index tsx 中出现错误 找不到模块 错误 无法解析 app src 中的 ConfigureStore src Index tsx 9 23 50 当
  • 预计响应会成功,但结果是 302

    我有以下文章控制器 def myarticles myarticles current student articles all respond to do format format html format xml render xml
  • 从 Javascript 调用 SAML IdP

    我再次需要社区的明智建议 我必须在我的 SSO 系统中集成多个 Web 应用程序 IdP 是 Active Directory 联合服务 ADFS2 SP 是 Weblogic 托管服务器 我在 Web SSO 配置文件中对 SP 启动的用
  • Bootstrap 轮播图像未正确对齐

    请看下面的图片 我们正在使用 bootstrap carousel 来旋转图像 但是 当窗口宽度较大时 图像与边框无法正确对齐 但是 无论窗口的宽度如何 bootstrap 提供的轮播示例始终可以正常工作 遵循代码 有人可以解释为什么轮播的
  • 如何在Java中将UTC时间戳转换为本地日、小时、分钟?

    给定时间戳 1245613885 这是 GMT 中的时间戳 如何使用服务器的本地时区信息将其转换为 Java 中的年 日 小时 分钟值 您可以使用java util Calendar http download oracle com jav
  • Prolog 中的 Lambda 表达式?

    我通常能够通过 maplist 找出 Lambda 的一些用法 但通常很难在 prolog 中使用 lambda 可能是因为它与其他语言不同 因为统一 这里是症结之一 如何应用声明的 Lambda 表达式 FE LAM X R 奇怪 和 之
  • 为什么Hashmap的输出是任意的,而不是按照特定的顺序?为什么它的排序顺序在插入和删除新节点时发生变化?

    请解释为什么哈希图会给出不可预测的输出 它根据什么对元素进行排序 为什么当我们插入 删除新元素时它的输出会改变 导入java util HashMap 导入 java util Iterator 导入java util Set public
  • Chrome开发者工具打开时出现双重请求

    我有一个奇怪的问题 我有一个非常简单的 Node expressjs 应用程序 我有一个更复杂的应用程序 但这个简单的示例显示了问题 该应用程序有三个路线 如下所示 var i 0 app route login get function
  • 如何在java中创建一个没有扩展名的文件

    java中是否可以创建一个没有扩展名的文件 你可以试试 File f f new File myfile if f exists f createNewFile
  • 添加android支持设计库后Gradle错误

    添加后我收到此错误compile com android support design 22 2 0 到我的 gradle 文件 app build intermediates exploded aar com android suppor
  • 无法从“假期”导入名称“复活节”

    我正在尝试导入fbprophet然而 在 Python Anaconda 上 我收到此错误 ImportError cannot import name easter from holidays 谁能建议可能出了什么问题 Code from
  • 在 AWS 中设置 JMeter 进行分布式测试,但存在连接问题

    我必须使用 JMeter 进行分布式测试 目标是让 AWS 中由一台本地服务器控制的多台远程服务器向 AWS 中的另一台服务器发送文件下载请求 如何在AWS中设置不同的服务器 我如何远程连接到他们 有人可以提供一些有关如何操作的分步说明吗