【问题标题】:Load test with puppeteer使用 puppeteer 进行负载测试
【发布时间】:2019-11-07 20:04:09
【问题描述】:

我们已经尝试使用 puppeteer 对我们的网站进行负载测试,这太棒了!但没有成功。

我们使用了巨大的 AWS 机器(我们使用了 c5.metal),但仍然无法运行数百个浏览器(约 200 个)。我们开始收到与超时有关的错误。

顺便说一句:在同一时刻,我们在计算机上进行了尝试,它运行良好,因此网站不是问题/

我的问题是,如果有人知道一种更好的方法来运行它的更轻版本的东西,可以帮助在 AWS 机器上运行更多的浏览器。

注意:我们的进程使用 nodejs 子进程,所以每个进程只运行 5 个浏览器

【问题讨论】:

  • 您是否以无头模式运行它们?您是打开多个浏览器还是只打开多个页面或标签?
  • 无头模式。我在 linux 操作系统上运行它。我使用多个浏览器..我还尝试在每个浏览器上使用几页 (5),但结果相同..
  • 它导航到的网站有多大?我不认为一个内核可以并行运行多个页面,特别是如果它导航的网站有很多 JS 和大型 DOM。
  • 我使用了 96 核机器。该网站不是很重,但它使用 websocket 并且可以实时工作。所以为了运行 10K 浏览器,我需要 ~10K 内核(1K 机器)?没有意义..普通的4核电脑可以轻松运行多个浏览器和页面..使用headless时应该更多,因为没有GUI
  • 在普通计算机上,您通常一次只能显示/导航一页。您是否禁用了页面渲染以加快速度?我认为您可以采取其他技巧来加快速度。

标签: node.js google-chrome puppeteer load-testing google-chrome-headless


【解决方案1】:

禁用页面渲染 - 或者使用 Puppeteer Firefox 代替 Chrome,它实际上只是一个不同的节点模块

至于超时,我想这是因为 chrome 的可怕优化 - 在无头模式下运行它不需要 GUI。

老实说,我怀疑这是机器的大小,这可能是因为 chrome 太糟糕了,无论内核数量如何。

实际上,没有浏览器可以打开 96 个单独的实例 - 可能是选项卡,但不是实例。

尝试打开更少的金额,然后在成功后做更多的事情。

【讨论】:

  • 试过..没有成功。火狐或禁用图像/css和字体的请求并没有给出很多..底线我什至无法运行1K。当有多个标签时,有时它会变得更慢。我设法平衡每个浏览器 10 个标签,这给了我最好的性能
  • 老实说,这可能只是 FF/Chrome 对这些东西没有优化的一个例子:/ - 也许尝试禁用缓存以及其他任何设置?可能只是 FF 或 Chrome 没有优化
  • 如果这是引擎本身没有能力创建我们帮助减少占用空间(内存、cpu、网络)以便并行运行的设置。我们没有任何东西在这里做..希望谷歌团队在这里发光
猜你喜欢
  • 2019-12-27
  • 2017-02-08
  • 2019-03-10
  • 2012-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-02
  • 2022-07-29
相关资源
最近更新 更多