Chrome Headless puppeteer CPU太多

zqdjd7g9  于 2023-08-01  发布在  Go
关注(0)|答案(3)|浏览(216)

我在nodejs中有一个puppeteer的抓取算法,它可以同时抓取5个页面,当它完成一个页面时,它会从队列中拉出下一个URL并在同一个页面中打开它。CPU始终处于100%。如何使 puppet 使用更少的cpu?
此过程在具有4GB RAM和2个vCPU的digitaloceans droplet上运行。
我已经启动了 puppet 师示例,并使用了一些参数来尝试使它变轻,但什么都没有发生

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();
});

azpvetkf

azpvetkf1#

我的默认参数,请测试它,并告诉我,如果这顺利运行。请注意,--no-sandbox在导航到易受攻击的网站时不安全,但如果您正在测试自己的网站或应用程序,则可以使用它。所以你要确定,你知道你在做什么。

const options = {
    args: [
      '--no-sandbox',
      '--disable-setuid-sandbox',
      '--disable-dev-shm-usage',
      '--disable-accelerated-2d-canvas',
      '--no-first-run',
      '--no-zygote',
      '--single-process',
      '--disable-gpu'
    ],
    headless: true
  }

  return await puppeteer.launch(options)

字符串

lokaqttq

lokaqttq2#

有几个因素会影响到这个。首先,检查您正在访问的站点是否使用大量CPU。像canvas和其他脚本这样的东西很容易占用你的CPU,特别是在使用canvas的时候。
如果你正在使用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"]

字符串
这是我在使用docker处理部署时在browserless.io上看到并解决的问题,CPU使用率就是其中之一。

7rtdyuoh

7rtdyuoh3#

为了避免导致高CPU使用率的并行执行,我必须使用

p-iterationNPM包。在我的情况下,这不是一个问题,因为我的工作不需要太多的时间。

您可以根据场景使用forEachSeriesmapSeries函数。

相关问题