Selenium Grid无法启动22个Chrome会话问题求助
解决Selenium Grid无法启动22个Chrome会话的问题
结合你描述的环境(WIN7_32bit/Win10_64bit、UwAmp、Selenium 2.53.1、Chrome Headless)和遇到的问题(实际仅启动2-6个会话),我整理了几个关键排查方向和解决方案:
1. 确认Selenium Grid节点配置是否生效
首先要验证你的节点参数是否被正确识别:
- 访问
http://localhost:4444/grid/console,查看节点的Browser Configuration,确认maxInstances和maxSession是否确实为22。 - 检查启动命令的格式:Selenium 2.x的
-browser参数中,逗号分隔的配置如果用引号包裹,可能会被系统解析异常。可以尝试去掉引号,改成:
或者拆分参数(部分旧版本Selenium更兼容这种写法):java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://localhost:4444/grid/register -browser browserName=chrome,maxInstances=22,seleniumProtocol=WebDriver -maxSession 22java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://localhost:4444/grid/register -browser browserName=chrome -browser maxInstances=22 -maxSession 22
2. 排查Chrome及ChromeDriver的限制
- 版本兼容性:Selenium 2.53.1仅兼容Chrome 53-55版本,对应ChromeDriver 2.25。如果你的Chrome版本过高,会出现会话启动失败的隐性问题,表现为无法达到预期实例数。建议降级Chrome到对应版本,或升级Selenium到3.141.59(稳定版)并搭配匹配的ChromeDriver。
- Headless模式参数优化:给Chrome添加以下启动参数,避免资源或沙箱限制:
$options = new ChromeOptions(); $options->addArguments([ '--headless', // 对应旧版Chrome的headless参数 '--no-sandbox', '--disable-dev-shm-usage', // 解决共享内存不足问题 '--disable-gpu', '--window-size=1920,1080' ]); - 进程残留:用任务管理器查看是否有大量未关闭的
chrome.exe或chromedriver.exe进程,残留进程会占用资源导致无法启动新会话,手动清理后再测试。
3. 调整UwAmp(Apache)的并发限制
UwAmp默认的Apache配置可能限制了并发请求数,导致PHP无法同时发起22个Selenium请求:
- 打开Apache的
httpd.conf文件,修改以下参数:MaxRequestWorkers 50 # 调整为大于22的值,根据服务器内存调整 ThreadsPerChild 25 MaxConnectionsPerChild 0 - 保存后重启UwAmp的Apache服务,确保并发进程数足够支撑22个会话请求。
4. 检查PHP端的并发配置
- php.ini参数:确认以下参数设置足够宽松:
max_execution_time = 300 # 延长脚本执行时间,避免会话未启动就超时 memory_limit = 512M # 给每个PHP进程足够内存 max_input_time = 300 - 并发实现方式:如果你用
curl_multi发起请求,需设置CURLMOPT_MAXCONNECTS为22以上:
若使用多进程(如$multiHandle = curl_multi_init(); curl_multi_setopt($multiHandle, CURLMOPT_MAXCONNECTS, 30);pcntl_fork),Windows系统对PHP多进程支持有限,建议改用多线程或异步任务库。
5. 查看Selenium日志定位问题
启动节点时添加日志输出,直接查看报错信息:
java -jar selenium-server-standalone-2.53.1.jar -role node -hub http://localhost:4444/grid/register -browser "browserName=chrome,maxInstances=22,seleniumProtocol=WebDriver" -maxSession 22 -log selenium-node.log
打开selenium-node.log,查找类似Failed to start new session、Port already in use或ChromeDriver timeout的报错,这些信息能直接定位核心问题。
内容的提问来源于stack exchange,提问作者mgulan




