google-chrome - Chrome 浏览器在 chrome 节点 Docker 容器中运行多个 chrome 浏览器时崩溃

标签 google-chrome docker selenium-webdriver selenium-grid docker-machine

主要目的是在单个容器中运行多个 chrome 浏览器(9 个浏览器)。

我有一个集线器和节点设置,其中包含多个浏览器的容器,可在单个 chrome 节点容器中运行。我使用以下 docker 命令创建了两个容器:

要创建集线器容器:
docker run -d -p 4445:4444 --name selenium_hub selenium/hub

要创建节点容器并将其链接到集线器:
docker run -v/dev/shm:/dev/shm -d -p 6001:5900 -p 7001:5555 -e NODE_MAX_INSTANCES=7 --name chrome_6 --link selenium_hub:hub selenium/node-chrome-debug

问题是,当我通过同时启动多个 chrome 浏览器(9 个浏览器)在单个容器中运行测试用例时,测试用例会执行一段时间,然后浏览器开始一个接一个地崩溃。

我已经尝试过容器的 docker logs,但无法找到问题的实际原因。

有人可以指导我吗?如何调试这种情况?有没有人遇到过类似的问题并解决了?

最佳答案

Chrome浏览器一一崩溃的主要原因与Hypertext Transfer Protocol -- HTTP/1.1有关。

Section 8.1.4 - ConnectionsRFC2616提到单用户客户端最多可以与任何服务器或代理保持 2 个连接 .作为代理最多可以使用 2*N 与另一台服务器或代理的连接,其中 N 是同时活跃的用户数。这些指南旨在改善 HTTP 响应时间并避免拥塞。

话虽如此,值得一提的是现代浏览器的限制比这要少,允许更多的连接 . RFC2616 没有指定如何防止超出限制。可以阻止打开连接,也可以关闭现有连接。

来自 this site 的示例谈到以下限制:

  • Internet Explorer 7.0 : 2
  • Internet Explorer 8.0 and 9.0 : 6
  • Internet Explorer 10.0 : 8
  • Internet Explorer 11.0 : 13
  • Firefox : 6
  • Chrome : 6
  • Safari : 6
  • Opera : 6
  • iOS : 6
  • Android : 6

  • 解决方案

    一个可行的解决方案似乎将并发持久连接的数量限制为 6 .

    根据讨论 Selenium grid sessions not applied,您可以通过创建修改主机文件的子域来找到另一种增加持久连接数量的方法。

    关于google-chrome - Chrome 浏览器在 chrome 节点 Docker 容器中运行多个 chrome 浏览器时崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49230368/

    相关文章:

    java - 如何从 Java 桌面应用程序(如 Java Swing 应用程序)向 Chrome 扩展发送/传递消息

    docker - 使用Jenkins的Artifactory插件,是否可以搜索存储库中具有属性的图像?

    selenium - CreatePlatformSocket() 返回错误 : An invalid argument was supplied. (0x27t6) 端口不可用。退出...在 Selenium Webdriver 中

    java - 如何在 Java 中查找 Chrome 下载路径

    javascript - 为什么我无法使用 Chrome 查看/调试加载了 jquery.html() 的 javascript

    javascript - 在 JavaScript 中获取保存的文件名

    javascript - 为什么 console.log 作为函数参数被非法调用?

    json - 如何找到已保存的Docker镜像tar文件中包含的内容?

    java - 使用 'docker stop' 和官方 java 镜像的 java 进程未收到 SIGTERM

    java - 新安装时出现 nullpointerException 错误