Selenium Grid v4节点连接新Hub时卡在“发送注册事件”的排查
以下是针对你的场景可继续排查的内容:
确认Hub注册端点的完整性
Selenium 4中Node注册默认需要指向Hub的4443端口及/grid/register路径,你当前的Node启动命令中Hub地址仅指定了IP,缺少端口和路径。尝试修改Node启动命令为:java -jar selenium-server-4.16.1.jar node --host 10.103.66.160 --hub http://10.103.163.24:4443/grid/register --log-level FINEST同时可在Hub机器上执行
netstat -tulpn | grep java,确认Hub是否在4443端口正常监听。检查JVM版本一致性
新Hub与Node的JVM版本差异可能导致注册请求的序列化/反序列化失败。分别在Hub和Node机器上执行java -version,确保两者使用的JVM版本一致(Selenium 4.16.1推荐Java 11及以上版本)。验证Hub的资源与内存配置
新Hub默认JVM堆内存可能不足,导致处理注册请求时阻塞。修改Hub启动命令,添加JVM内存参数后重启测试:java -Xmx2g -Xms1g -jar /opt/selenium4/selenium-server-4.16.1.jar hub --log-level FINEST --log-timestamp-format yyyy-MM-dd HH:mm:ss.SSS检查Hub的CORS与访问限制
若新Hub配置了CORS规则,可能拦截Node的注册请求。在Hub启动命令中临时添加--allowed-origins "*"参数,允许所有来源请求,测试是否能完成注册:java -jar /opt/selenium4/selenium-server-4.16.1.jar hub --log-level FINEST --log-timestamp-format yyyy-MM-dd HH:mm:ss.SSS --allowed-origins "*"抓包分析注册请求的完整流程
用tcpdump或Wireshark抓取Node与Hub 4443端口的流量,确认注册请求是否成功发送、Hub是否返回响应。在Node机器上执行:tcpdump -i any host 10.103.163.24 and port 4443 -w registration.pcap启动Node后停止抓包,分析数据包内容,判断问题出在请求发送阶段还是Hub处理阶段。
显式指定事件总线地址
Selenium 4依赖事件总线完成Node与Hub的通信,默认使用Hub的4442端口。尝试在Node启动命令中显式指定事件总线地址:java -jar selenium-server-4.16.1.jar node --host 10.103.66.160 --hub http://10.103.163.24:4443/grid/register --publish-events tcp://10.103.163.24:4442 --subscribe-events tcp://10.103.163.24:4442 --log-level FINEST检查Hub的绑定地址配置
确认新Hub是否绑定了正确的监听地址,若Hub仅绑定127.0.0.1,则无法接收外部Node的请求。在Hub机器上执行netstat -tulpn | grep java,查看监听地址是否为0.0.0.0(允许所有IP访问)。模拟注册请求验证Hub端可用性
在Hub机器上用curl模拟Node的注册请求,验证Hub的注册端点是否正常响应:curl -v -X POST http://10.103.163.24:4443/grid/register -H "Content-Type: application/json" -d '{"capabilities":[{"browserName":"chrome"}], "configuration":{"host":"10.103.66.160","port":5555}}'若请求返回成功(HTTP 200),则问题可能出在Node端;若无响应或返回错误,则需排查Hub的配置或服务状态。
内容的提问来源于stack exchange,提问作者Lars Nordin

