Apple M1芯片Mac上Selenoid无法启动并行测试问题排查
环境信息
- 设备:搭载Apple M1芯片的Mac
- 使用镜像:
aerokube/selenoid:1.10.8 selenoid/firefox:105.0 - 启动命令:
启动Selenoid:
启动Selenoid-UI:./cm selenoid start --vnc./cm selenoid-ui start
问题现象
单实例测试运行正常,但同时启动2个测试时触发SESSION_ATTEMPT_TIMED_OUT错误,日志如下:
[PROXY_TO]
[2fa920af171e51d860f1624f45a616b60e786d6ca36948c1660952be97b1275c[http://172.18.0.4:4444/wd/hub][SESSION_ATTEMPTED] [http://172.18.0.4:4444/wd/hub] [1]
[SERVICE_STARTED]
[selenoid/firefox:105.0][eccc7924577cdb2b805d51978eafec18b930f1dc33c71ad7c9ce41498001dedb][PROXY_TO]
[eccc7924577cdb2b805d51978eafec18b930f1dc33c71ad7c9ce41498001dedb[http://172.18.0.5:4444/wd/hub][SESSION_ATTEMPTED] [http://172.18.0.5:4444/wd/hub] [1]
[SESSION_ATTEMPT_TIMED_OUT] [30s]
[SESSION_FAILED] [http://172.18.0.4:4444/wd/hub] [New session attempts retry count exceeded]
[STOPPING_VIDEO_CONTAINER][718987c2275570cc8c49d22185023eb1f30adbcbdc7932a7432b71313e703c2f]
[SESSION_ATTEMPT_TIMED_OUT] [30s]
[SESSION_FAILED] [http://172.18.0.5:4444/wd/hub] [New session attempts retry count exceeded]
原因分析
- ARM架构兼容性限制:
selenoid/firefox:105.0为x86_64架构镜像,在M1的ARM设备上依赖Rosetta 2转译运行。单实例时转译资源充足,并发启动两个实例时,转译开销剧增导致容器初始化超时。 - 资源分配不足:M1的CPU/内存资源在并发启动Firefox容器时被耗尽,容器无法在默认30秒超时窗口内完成启动。
- 默认超时配置过短:Selenoid默认30秒的会话尝试超时,无法覆盖ARM架构下并发容器启动的额外耗时。
解决办法
1. 切换ARM原生Firefox镜像
使用支持ARM64架构的Firefox镜像,替换原有镜像:
selenoid/firefox:105.0-arm64
若官方无对应版本,可自行构建ARM镜像或升级至更高版本的Selenoid与Firefox(新版本对ARM兼容性更完善)。
2. 延长会话尝试超时时间
修改Selenoid的browsers.json配置文件,为Firefox增加超时配置:
{ "firefox": { "default": "105.0", "versions": { "105.0": { "image": "selenoid/firefox:105.0", "port": "4444", "path": "/wd/hub", "sessionAttemptTimeout": "60s" } } } }
修改后重启Selenoid:
./cm selenoid restart
3. 调整Docker资源分配
打开Docker Desktop的「设置-资源-高级」,调高CPU核心数(建议4核及以上)与内存(建议8GB及以上),应用设置后重启Docker与Selenoid。
4. 升级Selenoid版本
升级至最新稳定版Selenoid,新版本针对ARM架构的并发场景有优化:
./cm selenoid upgrade
内容的提问来源于stack exchange,提问作者Igor Vlasuyk

