EC2实例上JMeter分布式测试遇NoRouteToHostException的排查与解决
JMeter分布式测试NoRouteToHostException问题排查与修复
问题场景
我使用3台不同地域的EC2实例搭建JMeter分布式测试环境,1台作为主节点,2台作为从节点。已在所有实例的jmeter.properties文件中配置以下参数:
Remote_Hosts=ip_address1, ip_address client.rmi.localport=50000 server.rmi.localport=4000 server.rmi.ssl.disable=true server-port=8099 server.rmi.port=8099
运行测试脚本时抛出异常:
nested exception is: java.net.NoRouteToHostException: No route to host
问题根源
这个异常本质是网络连通性故障,结合EC2跨地域场景,核心原因包括:
- EC2安全组未开放JMeter通信所需端口:主节点与从节点之间的双向端口访问未被允许
- 跨地域VPC未打通:不同地域的EC2实例默认处于隔离VPC中,无对等连接或中转网关时无法通信
- 实例本地防火墙拦截了端口流量:比如iptables、firewalld等阻断了JMeter相关端口的数据包
Remote_Hosts配置错误:使用了跨地域无法访问的私有IP,或IP地址填写不全/有误
修复步骤
更新EC2安全组规则
- 主节点安全组:允许从节点IP访问50000端口(TCP);允许出站访问从节点的8099、4000端口(TCP)
- 从节点安全组:允许主节点IP访问8099、4000端口(TCP);允许出站访问主节点的50000端口(TCP)
- 注意:跨地域场景必须使用实例的公网IP/EIP,安全组规则要指定对应实例的公网IP或IP段
打通跨地域VPC网络(可选,更安全)
若不想暴露公网IP,可配置VPC对等连接(支持跨区域的AWS区域)或中转网关,实现跨地域VPC私有网络互联,让实例通过私有IP通信处理实例本地防火墙
登录实例后,关闭防火墙服务或添加端口放行规则:# 临时关闭firewalld systemctl stop firewalld # iptables放行JMeter端口 iptables -A INPUT -p tcp --dport 8099 -j ACCEPT iptables -A INPUT -p tcp --dport 4000 -j ACCEPT iptables -A INPUT -p tcp --dport 50000 -j ACCEPT验证网络连通性
在主节点测试从节点端口:telnet <从节点公网IP> 8099 nc -zv <从节点公网IP> 4000在从节点测试主节点端口:
nc -zv <主节点公网IP> 50000连通失败则重点排查安全组或VPC配置
配置项检查
当前配置覆盖了核心项,但需确认两个细节:
Remote_Hosts:补全第二个从节点的完整公网IP/EIP,避免使用跨地域无法访问的私有IP- 从节点启动方式:确保从节点是通过
jmeter-server脚本启动,而非普通JMeter客户端
内容的提问来源于stack exchange,提问作者Neha Bansal
相关产品推荐
相关产品推荐

