JMeter分布式压测连接异常求助:云Slave无法回连Windows Master
JMeter跨公网主从通信失败:Slave无法反向连接Master局域网IP
环境与配置
- 架构:Windows Master部署在家庭局域网(通过ngrok暴露公网IP:端口),两台Linux Slave部署在云服务器;Master可通过Telnet连通Slave的
server_port(1099/1100)。 - Slave节点配置(jmeter.properties):
# Jmeter Instance 01 remote_hosts=my_public_IP(Using ngrok) server_port=1099 server.rmi.localport=50003 server.rmi.ssl.disable=true # Jmeter Instance 02 remote_hosts=my_public_IP(Using ngrok) server_port=1100 server.rmi.localport=50004 server.rmi.ssl.disable=true
- Slave启动命令:
nohup jmeter_instance_01/apache-jmeter-5.6.3/bin/jmeter-server \ -Dserver_port=1099 \ -Djava.rmi.server.hostname=Cloud_server_public_ip \ -Dserver.rmi.localport=50003 \ > /slave1.log 2>&1 &
- Master节点配置(jmeter.properties):
client.rmi.localport=1001 client.rmi.hostname = my_publicNetwork(Using ngrok):65108 server.rmi.ssl.disable=true
问题现象
Slave节点的jmeter-server.log报错,核心信息为:
java.rmi.ConnectException: Connection refused to host: windows_ip; nested exception is: java.net.ConnectException: Connection timed out
可见Slave尝试连接Master的局域网IP而非配置的ngrok公网IP,导致连接超时。
解决方案
1. 修正ngrok端口映射
确保ngrok转发的是Master的RMI监听端口(client.rmi.localport=1001),执行正确的ngrok命令:
ngrok tcp 1001
记录输出的公网地址(如tcp://0.tcp.ngrok.io:65108),后续配置需使用该公网IP和端口。
2. 强制Master暴露公网IP给Slave
仅在jmeter.properties中配置client.rmi.hostname优先级不足,需在启动Master时通过JVM参数强制指定公网IP:
- 命令行启动:
jmeter -Djava.rmi.server.hostname=ngrok公网IP -Dclient.rmi.localport=1001
- Windows图形界面启动:编辑JMeter快捷方式,在目标字段末尾添加参数:
-Djava.rmi.server.hostname=ngrok公网IP -Dclient.rmi.localport=1001
3. 修正Master的remote_hosts配置
Master的jmeter.properties需配置Slave的公网地址(Slave的remote_hosts可删除,无需配置):
remote_hosts=Cloud_server_public_ip:1099,Cloud_server_public_ip:1100
4. 验证连通性
在云Slave服务器上测试能否连通Master的ngrok公网端口:
telnet ngrok公网IP 65108
若连通失败,检查:
- ngrok是否正常运行,端口映射未过期
- Windows防火墙是否允许1001端口的入站连接
- 家庭路由器是否存在额外端口限制
5. 重启服务
- 停止所有Slave和Master服务
- 按上述配置重新启动Master,再启动Slaves
- 重新执行压测任务
内容的提问来源于stack exchange,提问作者tsukiyomu
相关产品推荐
相关产品推荐

