gpt4 book ai didi

amazon-web-services - 在存在连接问题的 AWS 中设置 JMeter 以进行分布式测试

转载 作者:行者123 更新时间:2023-12-03 08:46:27 24 4
gpt4 key购买 nike

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

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

有人可以提供一些有关如何操作的分步说明吗?
我尝试了几件事,但一直遇到跨网络的连接问题。

最佳答案

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

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

远程(服务器)JMeters 配置

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

  • 安装的java:
    $ sudo apt-get update
    $ sudo apt-get install default-jre
  • 安装的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
  • 编辑了jmeter.properties /bin 中的文件JMeter 安装文件夹并取消注释包含 server.rmi.localport 的行环境。我们将端口更改为 50000。
    server.rmi.localport=50000
  • 启动 JMeter 服务器。确保服务器报告监听的地址和端口是正确的。
    $ cd ~/jmeter/apache-jmeter-2.9/bin
    $ vi jmeter-server

  • 本地(客户端)JMeter 配置

    然后我们设置 JMeter 以在本地客户端机器上的这些实例上远程运行测试:
  • 确保使用与服务器上运行的相同版本的 JMeter。如上所述安装 Java 和 JMeter。
  • 通过编辑 jmeter.properties 启用远程测试可以在 bin 中找到的文件JMeter 安装文件夹。参数remote_hosts需要使用我们连接的远程服务器的公共(public) DNS 进行设置。
  • remote_hosts=54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x,54.x.x.x

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

    问题和决议

    以下是我们遇到的问题以及我们如何解决这些问题:
  • 客户端失败:

    ERROR - jmeter.engine.ClientJMeterEngine: java.rmi.ConnectException: Connection - refused to host: 127.0.0.1



    这是因为服务器主机由于 Amazon NAT 而返回私有(private) IP 地址作为其地址。
    我们通过设置参数 RMI_HOST_DEF 解决了这个问题。该/usr/local/jmeter/bin/jmeter-server脚本包括启动服务器:
    RMI_HOST_DEF=-Djava.rmi.server.hostname=54.xx.xx.xx

    现在,AWS 实例返回了服务器的外部 IP,我们可以开始测试了。
  • 当服务器节点尝试返回结果并尝试连接客户端时,服务器尝试连接到我本地机器的外部 IP 地址。但它抛出了一个连接被拒绝的错误:

    2013/05/16 12:23:37 ERROR - jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: Connection refused to host: xxx.xxx.xxx.xx;



    我们通过在客户端设置反向隧道解决了这个问题。
  • 首先,我们编辑了jmeter.properties /bin 中的文件JMeter 安装文件夹并取消注释包含 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

  • 我们保持这些 session 中的每一个都是打开的,因为 JMeter 服务器需要能够将测试结果传递给客户端。
  • 然后我们设置JVM_ARGS客户端上的环境变量,位于 jmeter.sh /bin 中的文件文件夹:
    export JVM_ARGS="-Djava.rmi.server.hostname=localhost"

  • 通过这样做,JMeter 将告诉服务器连接到 localhost:60000。交付他们的结果。这最终被隧道化回客户端。
  • 在闲置一段时间后,与服务器的 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设置后。
    )

    关于amazon-web-services - 在存在连接问题的 AWS 中设置 JMeter 以进行分布式测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16618915/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com