当前位置: 首页 > 面试题库 >

设置JMeter以便在AWS中进行具有连接问题的分布式测试

赵晟睿
2023-03-14
问题内容

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

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

有人可以提供一些逐步说明吗?
我已经尝试了几种方法,但是一直遇到跨网络的连接问题。


问题答案:

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

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

这是我们设置每个实例的方式。

  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
  1. 编辑了JMeter安装文件夹jmeter.properties中的/bin文件,并取消注释了包含server.rmi.localport设置的行。我们将端口更改为50000。

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

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

本地(客户端)JMeter配置

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

  • 确保使用与服务器上运行的版本相同的JMeter。如上所述安装了Java和JMeter。
  • 通过编辑jmeter.properties可以bin在JMeter安装文件夹中找到的文件来启用远程测试。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,我们可以开始测试了。

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

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

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

* 首先,我们编辑了JMeter安装文件夹`jmeter.properties`中的`/bin`文件,并取消了包含该`client.rmi.localport`设置的行的注释。我们将端口更改为60000:

            client.rmi.localport=60000


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

            $ ssh -i ~/.ssh/54-x-x-x.us-east.pem -R 60000:localhost:60000 ubuntu@54.x.x.x

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

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

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

这样,JMeter将告诉服务器连接以localhost:60000传递结果。这最终被隧穿回客户端。

  1. 闲置一小会后,与服务器的SSH连接不断断开。为了防止这种情况的发生,我们在每个SSH隧道设置中添加了一个参数,指示客户端等待60秒,然后再向服务器发送空数据包以保持连接有效:
    $ ssh -i ~/.ssh/54-x-x-x.us-east.pem -o ServerAliveInterval=60 -R 60000:localhost:60000 ubuntu@54.x.x.x
    

.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设置好之后再使用。)



 类似资料:
  • 我正在尝试在eclipse/java中创建一个用于selenium测试的项目。 我在windows机器上做这件事,这也是我的selenium网格中心。 我想在一台远程机器上运行我的测试,那就是mac。 在我的项目中,当我这样设置webdriver时: 那条路径应该指向我的遥控器/mac上的chromedriver,对吗? mac已经安装了chrome。我在这台机器上找到了chrome驱动程序: 但

  • 完成以下步骤:主机>编辑jmeter文件,并将远程主机ip=10.21.4.199和从机启动JMeter-Server,所有机器都是相同的子网,使用相同的java和jmeter版本。问题是:1>不运行从机。可以提供一步一步的步骤,Plz不添加jmeter分发pdf的通用pdf。2>脚本在没有远程主机的情况下运行,请为空。3>必须在主机上运行脚本? 你能解释其他一点吗?意思是:

  • 响应消息:java.sql.SQLException:无法创建PoolableConnectionFactory(ORA-00604:递归SQL级别1 ORA-12705发生错误:无法访问NLS数据文件或指定的无效环境)

  • 我是JDBC连接配置中的一个问题。当我执行测试时(只有JDBC请求-insert),不会在报告中显示任何结果(查看结果树)。 连接是SQL Server。请参见以下配置: 数据库URL:jdbc: sqlserver://${myURL} JDBC驱动类:com.microsoft.sqlserver.jdbc.SQLServerDriver 用户名:${user} 密码:${密码} 有人能帮我吗

  • Consul提供了一个用于存储配置和其他元数据的键/值存储。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引导”阶段,配置被加载到Spring环境中。默认情况下,配置存储在/config文件夹中。基于应用程序的名称和模拟解析属性的Spring Cloud Config顺序的活动配置文件创建多个PropertySource实例。例

  • 好的,我一直在将结果写入JMeter中的文件夹时遇到问题。 我已经设置了两个变量,一个用于测试的名称,一个用于提交日期。我希望将报告写到用这两个变量命名的文件夹中。 这是变量: 要写入的文件夹的路径如下所示: 当我在主计算机上运行它时,它很好。它会保存到正确的文件和文件夹路径,最终显示如下: 然而,当我在远程机器上运行它时,它会按如下方式保存它: 所以我最终得到了一个名为“${TestRun}${

  • 我是JDBC连接配置中的一个问题。当我执行我的测试(仅JDBC请求-插入)时,报告中没有出现任何结果(查看结果树): “无法为连接网址 'jdbc:oracle:JDTST'创建类 'oracle.jdbc.OracleDriver' 的 JDBC 驱动程序” 连接是Oracle。请参见以下配置: 数据库URL:jdbc:oracle://${myURL} JDBC 驱动程序类: com.micr

  • 我的目标是使用 4 个 Azure 服务器作为负载生成器和 1 个 Azure 服务器来运行负载测试,以启动测试并收集结果。我运行了分布式测试,并且获得了良好的数据。但是今天当我远程启动测试时,4个负载生成器中的3个失败,所有http事务出错。失败的事务记录以下错误: 非HTTP响应消息:java.lang.ClassNotFoundException:org.apache.commons.log