Chrome Headhead puppeteer太多CPU

时间:2018-02-27 11:50:13

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

我在nodejs中有一个抓取算法,其中puppeteer同时刮擦5个页面,当它完成一个页面时,它从队列中拉出下一个url并在同一页面中打开它。 CPU始终为100%。如何让puppeteer使用更少的CPU?

此过程在具有4gb RAM和2个vCPU的digitaloceans droplet上运行。

我已经用一些args启动了木偶操作实例,试图让它更轻但没有发生

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

我可以提供任何其他的args以减少CPU饥饿吗?

我还阻止了图片加载

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

3 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

有几个因素可以发挥作用。首先,检查您使用大量CPU访问的站点。诸如canvas和其他脚本之类的东西很容易在你的CPU中咀嚼,特别是在使用canvas时。

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

EXPOSE 8080

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

这是我在browserless.io上目睹和修复的事情,因为我使用docker来处理部署,CPU使用率就是其中之一。

答案 2 :(得分:0)

为避免并行执行导致CPU使用率较高,我不得不使用

顺序执行作业

p-迭代 NPM软件包。就我而言,这不是问题,因为我的工作不需要太多时间。

您可以根据自己的情况使用 forEachSeries mapSeries 函数。