【问题标题】:JMeter with remote servers带有远程服务器的 JMeter
【发布时间】:2012-07-27 13:33:36
【问题描述】:

我正在尝试以分布式模式设置 JMeter。 我有一个在 ec2 实例上运行的服务器,我希望主服务器在我的本地计算机上运行。 我不得不跳过一些希望让 RMI 在服务器上正常工作,但通过将“java.rmi.server.hostname”设置为 ec2 实例的 IP 来解决。

下一个(希望是最后一个)问题是服务器与主服务器通信。

问题在于,因为我是从内部网络执行此操作的,所以当主机应该发送回我的外部连接的 IP (92.XXX) 时,它正在发送其本地/内部 IP 地址 (192.168.1.XXX) .XXX.XXX)。

我可以在 jmeter-server.log 中看到这一点:

错误 - jmeter.samplers.RemoteListenerWrapper: testStarted(host) java.rmi.ConnectException: Connection denied to host: 192.168.1.50;嵌套异常是:

那个主机IP是错误的。它应该是 92.XXX.XXX.XX 地址。我认为这是因为在主日志中我看到以下内容:

2012/07/29 20:45:25 信息 - jmeter.JMeter:IP:192.168.1.50 名称:XXXXXX.local 全名:192.168.1.50

并且这个 IP 在 RMI 设置期间被发送到服务器。

所以我认为我有两个选择:

  1. 告诉master发送外部IP
  2. 告诉服务器连接到主服务器的外部 IP。

但我看不到在哪里设置这些命令。

任何帮助都会很有用。

【问题讨论】:

标签: testing amazon-ec2 jmeter


【解决方案1】:

在游戏中可能会很晚,但仍然如此。我用 jmeter 5.3 运行它。

因此,通过在 aws 中设置从属服务器和在本地计算机上设置控制器来使其工作。

  1. 确保您的从站具有正确的本地端口和主机名。从服务器上的主机名应该是 ec2 实例公共 dns。
  2. 确保 AWS 具有适当的安全策略。
  3. 对于控制器(即您的本地计算机),请确保使用参数“-Djava.rmi.server.hostname=”运行。你可以通过谷歌搜索“我的公共IP地址”来获取IP。绝对不是那些 192.xxx.xxx.x 或 172.xx.xxx。
  4. 然后您必须配置调制解调器以端口转发您的机器,该机器曾经是您的控制器。可以从从属日志中获取端口(具有 FINE: RMI RenewClean .....,是的,您必须将日志设置为详细)。或设置 DMZ 并放置您的控制器机器。危险,但只是为了测试时间方便,之后不要忘记关闭它
  5. 那么它应该可以工作了。

【讨论】:

    【解决方案2】:

    为了未来读者的利益,请不要拒绝。有可能的!此外,您还可以保留防火墙。

    在这种情况下,我在 4000 端口上做了所有事情。

    如何连接 JMeter 客户端和服务器以使用 Amazon EC2 实例和跨不同网络的本地开发机器进行分布式测试。

    设置:

    1. JMeter 2.13 客户端:本地开发计算机(不同网络)
    2. JMeter 2.13 服务器:Amazon EC2 实例

    我配置分布式客户端/服务器JMeter连接如下:

    1。在我的防火墙/路由器上添加了端口转发规则:

    • 端口:4000
    • 目标:局域网上的 JMeter 客户端私有 IP 地址。

    2。在 EC2 实例上配置“安全组”设置:

    • 类型:允许:入站
    • 端口:4000
    • 来源:JMeter 客户端公共 IP 地址(我的开发计算机/网络公共 IP)

    更新:如果您已经拥有 SSH 连接,则可以使用 SSH 隧道进行连接,这样就无需添加防火墙规则。

    $ ssh -i ~/.ssh/54-179-XXX-XXX.pem ServerAliveInterval=60 -R 4000:localhost:4000 jmeter@54.179.XXX.XXX
    

    3。配置的客户端 $JMETER_HOME/bin/jmeter.properties 文件 RMI 部分:

    请注意,此处仅包含我更改的非默认值:

    #---------------------------------------------------------------------------
    # Remote hosts and RMI configuration
    #---------------------------------------------------------------------------
    
    # Remote Hosts - comma delimited
    # Add EC2 JMeter server public IP address:Port combo
    remote_hosts=127.0.0.1,54.179.XXX.XXX:4000
    
    # RMI port to be used by the server (must start rmiregistry with same port)
    server_port=4000
    
    # Parameter that controls the RMI port used by the RemoteSampleListenerImpl (The Controler)
    # Default value is 0 which means port is randomly assigned
    # You may need to open Firewall port on the Controller machine
    client.rmi.localport=4000
    
    # To change the default port (1099) used to access the server:
    server.rmi.port=4000
    
    # To use a specific port for the JMeter server engine, define
    # the following property before starting the server:
    server.rmi.localport=4000
    

    4。配置远程服务器$JMETER_HOME/bin/jmeter.properties文件RMI部分如下:

    #---------------------------------------------------------------------------
    # Remote hosts and RMI configuration
    #---------------------------------------------------------------------------
    
    # RMI port to be used by the server (must start rmiregistry with same port)
    server_port=4000
    
    # Parameter that controls the RMI port used by the RemoteSampleListenerImpl (The Controler)
    # Default value is 0 which means port is randomly assigned
    # You may need to open Firewall port on the Controller machine
    client.rmi.localport=4000
    
    # To use a specific port for the JMeter server engine, define
    # the following property before starting the server:
    server.rmi.localport=4000
    

    5。使用以下命令启动 JMeter 服务器/从站:

    jmeter-server -Djava.rmi.server.hostname=54.179.XXX.XXX
    

    其中 54.179.XXX.XXX 是 EC2 服务器的公共 IP 地址

    6。使用以下命令启动 JMeter 客户端/主控:

    jmeter -Djava.rmi.server.hostname=121.73.XXX.XXX
    

    其中 121.73.XXX.XXX 是我的客户端计算机的公共 IP 地址。

    7。运行 JMeter 测试套件。

    JMeter GUI 日志输出

    成功了!

    【讨论】:

    • 感谢您的详细描述,它对我设置类似的环境有很大帮助。祝你今天过得愉快! :)
    • 我没有使用端口转发,服务器正在运行:服务器无法启动:java.rmi.server.ExportException:端口已在使用:4000;嵌套异常是:java.net.BindException:地址已在使用中发生错误:端口已在使用:4000;嵌套异常是:java.net.BindException: Address already in use 我需要做什么?
    • @NateUni 您需要找出正在侦听端口 4000 的进程。如果 jmeter-server 已经启动,您可以终止该进程并重新启动它。
    • @DavidThomas 这对我有用,但没有编辑 remote_hosts 子句,因为我有一个使用自动缩放构建的 jmeter 服务器云,并且它们的 IP 是随机分配的。我必须使用以下命令执行 jmeter: apa​​che-jmeter-3.0/bin/jmeter -n -t job.jmx -R ip1:ip2:4000
    【解决方案3】:

    我遇到了类似的问题:JMeter 服务器尝试连接到错误的地址以发送测试结果(它尝试连接到 localhost)。

    我通过在启动 JMeter master 时设置以下参数解决了这个问题:

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

    【讨论】:

      【解决方案4】:

      看起来好像这不起作用Distributed JMeter Testing 解释了在分布式环境中进行负载测试的要求。我相信第 2 和第 3 是您的用例所特有的。

      1. 系统上的防火墙已关闭。
      2. 所有客户端都在同一个子网上。
      3. 如果使用 192.x.x.x 或 10.x.x.x ip 地址,则服务器在同一子网中。
      4. 确保 JMeter 可以访问服务器。
      5. 确保在所有系统上使用相同版本的 JMeter。混合版本可能无法正常工作。

      【讨论】:

      • 我基本上把所有东西都放在了 EC2 上。比我想象的要容易。看起来您不能(轻松)在外部网络和内部网络之间建立隧道。啊……RMI的乐趣。我会确认你的回答,即使这不是我想听到的。
      • 以下帖子详细说明了它是可能的:stackoverflow.com/questions/16618915/…
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-11
      • 2011-11-04
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多