连接到 jmeter 从属 docker 容器时连接被拒绝错误

Posted

技术标签:

【中文标题】连接到 jmeter 从属 docker 容器时连接被拒绝错误【英文标题】:Connection refused error while connecting to jmeter slave docker container 【发布时间】: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 来创建图像 【参考方案1】:

根据:

https://www.guru99.com/jmeter-distributed-testing.html https://www.baeldung.com/jmeter-distributed-testing JMeter with remote servers https://medium.com/@Muhammad.Ali.Nisar/jmeter-master-slave-configuration-fe38fc890ca https://jmeter.apache.org/usermanual/remote-test.html

我们只需要:

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

【讨论】:

以上是关于连接到 jmeter 从属 docker 容器时连接被拒绝错误的主要内容,如果未能解决你的问题,请参考以下文章

在主机未连接到网络时连接到 vmware 播放器中的服务器

设置短名称时连接到生产节点

android:无法在 targetSdkVersion 更改时连接到相机服务

使用 Fabric 时连接到 ~/.ssh/config 中列出的主机

如何将多个扬声器连接在一起并同时连接到手机?

异常:503 将数据推送到 Google Pub/Sub 时连接到所有地址失败