You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

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,确认maxInstancesmaxSession是否确实为22。
  • 检查启动命令的格式:Selenium 2.x的-browser参数中,逗号分隔的配置如果用引号包裹,可能会被系统解析异常。可以尝试去掉引号,改成:
    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
    
    或者拆分参数(部分旧版本Selenium更兼容这种写法):
    java -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.exechromedriver.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 sessionPort already in useChromeDriver timeout的报错,这些信息能直接定位核心问题。

内容的提问来源于stack exchange,提问作者mgulan

火山引擎 最新活动