【问题标题】:Chrome Headless puppeteer too much CPUChrome Headless puppeteer CPU 过多
【发布时间】:2018-08-07 01:27:29
【问题描述】:

我在 nodejs 中有一个带有 puppeteer 的抓取算法,它同时抓取 5 个页面,当它完成一个页面时,它会从队列中拉下一个 url 并在同一页面中打开它。 CPU 始终处于 100% 状态。如何让 puppeteer 使用更少的 cpu?

此进程在具有 4gb RAM 和 2 个 vCPU 的 digitaloceans 液滴上运行。

我用一些 args 启动了 puppeteer 实例,试图让它更轻,但什么也没发生

 puppeteer.launch({
    args: ['--no-sandbox', "--disable-accelerated-2d-canvas","--disable-gpu"],
    headless: true,
  });

我可以提供任何其他参数来减少 CPU 占用率吗?

我也阻止了图片加载

await page.setRequestInterception(true);
page.on('request', request => {
  if (request.resourceType().toUpperCase() === 'IMAGE')
    request.abort();
  else
    request.continue();
});

【问题讨论】:

  • 这是我现在遇到的同样问题,也在 DigitalOcean 上。你有没有发现什么技巧来照顾它?

标签: node.js google-chrome cpu-usage headless puppeteer


【解决方案1】:

我的默认参数,请测试并告诉我这是否运行顺利。

  const options = {
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-accelerated-2d-canvas',
      '--no-first-run',
      '--no-zygote',
      '--single-process', // <- this one doesn't works in Windows
      '--disable-gpu'
    ],
    headless: true
  }

  return await puppeteer.launch(options)

【讨论】:

  • 似乎有很大帮助!谢谢!
  • P.S.可用 args 及其含义的列表位于:peter.sh/experiments/chromium-command-line-switches
  • 感谢@drmrbrewer 提供这个广泛的列表
  • 谢谢,但是使用--no-sandbox会不会很危险?
  • 还有其他人认为会有帮助的标志吗?
【解决方案2】:

为了避免导致 CPU 使用率高的并行执行,我不得不使用顺序执行作业

p 迭代 NPM 包。就我而言,这不是问题,因为我的工作不会花费太多时间。

您可以根据具体情况使用 forEachSeriesma​​pSeries 函数。

【讨论】:

    【解决方案3】:

    有几个因素可以影响这一点。首先,检查您访问的站点是否使用大量 CPU。像画布和其他脚本这样的东西很容易消耗你的 CPU,尤其是在使用画布时。

    如果您使用 docker 进行部署,请确保使用 dumb-initThere's a nice repo here that goes into why you'd use such a thing,但本质上,在您的 docker 映像中分配的进程 ID 在处理终止时会出现一些问题:

    EXPOSE 8080
    
    ENTRYPOINT ["dumb-init", "--"]
    CMD ["yarn", "start"]
    

    这是我在 browserless.io 上看到并修复的,因为我使用 docker 来处理部署,CPU 使用率就是其中之一。

    【讨论】:

    • 我正在使用带有哑初始化的 docker,但它仍然占用了所有 4 个内核的 50%。没有使用画布,只打开了 1 个页面。
    • @LaurynasMališauskas 你的 dockerfile 有没有公开的?
    猜你喜欢
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-24
    • 1970-01-01
    • 1970-01-01
    • 2018-06-12
    相关资源
    最近更新 更多