Chrome无头木偶太多CPU了

Pjo*_*kov 9 google-chrome headless cpu-usage node.js puppeteer

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

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

我用一些args启动了puppeteer实例,试图让它更轻但没有任何反应

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

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

我也阻止了图片加载

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

Edi*_*nto 20

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

  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)
Run Code Online (Sandbox Code Playgroud)

  • PS 可用参数及其含义的列表位于:https://peter.sh/experiments/chromium-command-line-switches/ (3认同)
  • 感谢@drmrbrewer 提供的这份详尽的清单 (2认同)

bro*_*ess 2

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

如果您使用 docker 进行部署,请确保使用dumb-init. 这里有一个很好的存储库,解释了为什么要使用这样的东西,但本质上,在处理终止时,在 docker 映像中分配的进程 ID 会出现一些问题:

EXPOSE 8080

ENTRYPOINT ["dumb-init", "--"]
CMD ["yarn", "start"]
Run Code Online (Sandbox Code Playgroud)

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