【问题标题】:Connection refused error while connecting to jmeter slave docker container连接到 jmeter 从属 docker 容器时连接被拒绝错误
【发布时间】:2021-12-31 05:47:34
【问题描述】:

我正在尝试使用 Docker 实现 Jmeter 分布式框架。主从运行在 ec2 的不同主机上。端口已打开以允许通信。

Master 卡在下面的消息中

Starting distributed test with remote engines: [slaveIP:1099] @ Sun Nov 21 04:50:29 GMT 2021 (1637470229447)
Remote engines have been started:[slaveIP:1099]

在从属端,它向我抛出连接被拒绝的错误。

java.rmi.ConnectException: Connection refused to host: 172.17.0.2; nested exception is:

从机启动命令:

docker run \
        -dit \
        -p 6000:6000 \
        -p 1099:1099 \
        -v "${volume_path}":${jmeter_path} \
        --rm \
        jmeter \
        -n -s \
        -Jclient.rmi.localport=3000 \
        -Jserver.rmi.localport=6000 \
        -Dserver_port=1099 \
        -Djava.rmi.server.hostname=<HostIP> \
        -Dserver.rmi.ssl.disable=true \
        -j ${jmeter_path}/server/slave_${timestamp}_${IP_ADD}.log

启动master的命令

docker run \
  -v "${volume_path}":${jmeter_path} \
  -p 3000:3000 \
  --rm \
  jmeternew \
  -n -X \
   -t ${jmeter_path}/$1 \
  -Dserver.rmi.ssl.disable=true \
  -Dclient.rmi.localport=3000 \
  -R slaveIP:1099 \
  -l ${jmeter_path}/client/result_${timestamp}.jtl \
  -j ${jmeter_path}/client/jmeter_${timestamp}.log

如果我在同一台机器上运行 master 和 slave,相同的命令会起作用。 我尝试更改 java.rmi.server.hostname=0.0.0.0。 它也让我连接被拒绝错误

【问题讨论】:

  • #1 master docker run的哪个参数中,设置slave ip? #2 Master和client有不同的ips?这些 ip 是公开的还是存在于同一个网络中?
  • 你使用的是什么 jmeter docker 镜像?
  • @JRichardsz -R 参数用于设置从IP。#2。是的,两者都在同一个子网中。我还检查了所有使用端口上主从之间的网络连接
  • @JRichardsz 我已经关注了 Blazemeter 博客 blazemeter.com/blog/jmeter-distributed-testing-with-docker 来创建图像

标签: java docker performance jmeter rmi


【解决方案1】:

根据:

我们只需要:

  • 配置从机
  • 配置运行机器
  • 使用文件jmeter/bin/jmeter.properties在master上添加slave ip/ips
  remote_hosts=192.165.0.10,192.165.0.20,192.165.0.30
  • 主端口和从端口是随机分配的,因此您应该分别使用参数:client.rmi.localport 和 server.rmi.localport
  • 然后启动主jmeter
  • 然后启动slave jmeter,连接就会建立起来。

建议

按照互联网上的几个教程建立与 docker 的连接。这将帮助您检测以下错误:

  • 防火墙权限
  • 主从端口配置
  • 公共/私有网络限制

如果可行,则使用 docker 将其自动化。

【讨论】:

    【解决方案2】:
    1. 您正在使用172.17.0.2,这是Class B networks 的一种本地网络地址,因此您的“主机”可能无法相互访问,请尝试改用public IP addresses
    2. 您需要在您的操作系统firewallEC2 security groups 中打开RMI 端口
    3. 我不明白你为什么需要 docker,它不会增加任何价值,只会让事情变得更复杂并消耗资源
    4. 我看不到在那里进行分布式测试的原因,一个主和一个从等于一台“负载生成器”机器,这意味着您可以从单个主机run your test in command-line non-GUI mode 并获得相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-20
      • 2020-09-21
      • 2021-06-11
      • 2019-01-05
      • 1970-01-01
      • 1970-01-01
      • 2021-02-25
      相关资源
      最近更新 更多