【问题标题】:Puppeteer-Cluster consistently using only half of my coresPuppeteer-Cluster 一直只使用我一半的核心
【发布时间】:2023-02-16 19:48:55
【问题描述】:

我正在运行一个非常标准的 puppeteer 集群作业,具有以下设置:

const cluster = await Cluster.launch({
    concurrency: Cluster.CONCURRENCY_PAGE, // maximize sharing data between jobs
    maxConcurrency: 8,
    monitor: true
}

但是,我的 CPU 监视器从来没有显示超过 4 个核心的峰值。

强制 maxConcurrency 更高显示更多的工作人员正在运行,但 cpu 利用率没有变化。

我已经阅读了数十个 StackOverflow 线程,但我找不到任何解决此现象的方法,并且其他最大化性能的技巧(更改并发模型、传递自定义 chrome args 等)对整体 cpu 利用率没有任何影响.

FWIW,我在运行节点 v16.19.0 的 Mac OS Ventura 上,从 2019 年开始使用 8 核 i7。(我的一个理论是这里发生了一些操作系统/节点线程亲和性的事情......)

【问题讨论】:

    标签: parallel-processing puppeteer puppeteer-cluster


    【解决方案1】:

    增加 maxConcurrency 值不一定会增加 Puppeteer 集群的 CPU 利用率是正常的。这是因为 CPU 利用率取决于许多因素,包括正在执行的任务的复杂性、正在加载的页面的大小以及运行 worker 的机器的性能。

    您可以尝试一些方法来优化 Puppeteer 集群的性能:

    优化您的 Puppeteer 代码:确保您的 Puppeteer 代码经过优化,以最大限度地减少每个工作人员需要完成的工作量。这可以包括诸如最小化请求数量、使用高效选择器定位元素以及使用适当的等待时间来避免不必要的延迟等事情。

    优化您的机器资源:确保运行您的工作人员的机器有足够的资源来处理工作负载。这可能包括增加每个工作人员可用的 CPU 和内存资源,以及确保机器在最新版本的操作系统和 Puppeteer 上运行。

    监控集群性能:使用监控选项来跟踪集群的性能并确定任何性能瓶颈。您可以使用 Chrome DevTools 等工具来监控各个页面的性能,并确定与页面加载时间或其他性能指标有关的任何问题。

    通过优化 Puppeteer 代码、机器资源和监控集群性能,您可以提高 Puppeteer 集群作业的性能和效率

    【讨论】:

    • 是的,我尝试了所有这些。正如我所说,我已经花了相当多的时间来阅读这里的各种木偶操作优化帖子。不过,奇怪的是一致的半核利用率表明这根本不是优化问题。
    【解决方案2】:

    Aaaa 事实证明这确实是一个平台问题,但它甚至比 OS/node 还要低级!

    我的八核 i7 根本不是八核:它使用 SMT,在单个内核上并行运行两个线程。所以我实际上是在处理核心和节点的工作线程正在最大化它们。

    这里有详细描述:https://github.com/denoland/deno/issues/10592

    我要离开这个,以防其他人遇到同样的问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-16
      相关资源
      最近更新 更多