You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Selenium-Java容器并行Chrome测试出现UnreachableBrowserException问题咨询

根因分析

  • 容器共享内存不足:Docker容器默认/dev/shm大小仅为64MB,Chrome运行时会将大量临时渲染数据存入共享内存,4个并行实例运行多次后很容易占满共享内存,直接触发Chrome进程崩溃,导致WebDriver和浏览器的通信连接被强制断开,就会抛出EOF、流意外结束的异常。
  • 版本适配缺陷:你使用的Selenium 3.13.0是2018年发布的旧版本,和2021年发布的Chrome 94版本跨度太大,底层okhttp通信框架和高版本Chrome的W3C协议适配存在已知bug,偶发会出现浏览器已经返回响应但Selenium侧读取流失败的问题。
  • 资源泄漏堆积:如果用例执行结束后没有强制销毁WebDriver实例,残留的Chrome进程、临时目录、端口占用会持续占用系统资源,跑5-10次后资源耗尽,新启动的Chrome实例无法正常响应请求。
  • 并发请求过载:4个用例并行执行时,同一时间可能有多个操作请求发到Chrome的调试端口,端口处理队列满了之后会主动断开空闲连接,导致Selenium端读取响应时直接读到结束符。

解决方法

  • 调整容器启动参数
    启动容器时增加--shm-size=2g参数,将共享内存大小调整为2GB,同时给容器分配不低于4核CPU、8GB内存,满足多Chrome实例并行的资源需求。
  • 修复版本兼容性
    将Selenium版本升级到3.141.59(3.x系列最终稳定版),该版本修复了大量okhttp通信异常和高版本Chrome适配问题;如果后续升级Chrome到100+版本,可以直接升级到Selenium 4.x系列。
  • 优化Chrome启动配置
    初始化ChromeOptions时添加以下参数,降低Chrome资源占用,避免容器环境下崩溃:
    ChromeOptions options = new ChromeOptions();
    options.addArguments("--no-sandbox"); // 关闭沙箱,适配容器运行环境
    options.addArguments("--disable-dev-shm-usage"); // 禁用/dev/shm存储,改用磁盘临时目录
    options.addArguments("--disable-gpu"); // 禁用GPU渲染,减少容器环境崩溃概率
    options.addArguments("--headless=new"); // 启用新无头模式,资源占用更低、稳定性更高
    options.addArguments("--remote-allow-origins=*"); // 放开跨域限制,避免通信请求被拦截
    
  • 完善资源回收和重试机制
    所有用例执行完成后,在finally块强制调用driver.quit()销毁WebDriver实例,不要仅调用driver.close();针对UnreachableBrowserException、EOFException这类偶发通信异常,给操作封装2-3次重试逻辑,每次重试间隔1-2秒;定期清理容器内/tmp目录下的Chrome临时目录,避免临时文件堆积。
  • 优化并行执行策略
    可以将并行数从4调整为3,或者给每个WebDriver初始化逻辑加100-300ms的随机启动延迟,避免多个Chrome实例同时启动瞬间打满资源。

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 23:57:00