我在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();
});
型
3条答案
按热度按时间azpvetkf1#
我的默认参数,请测试它,并告诉我,如果这顺利运行。请注意,
--no-sandbox
在导航到易受攻击的网站时不安全,但如果您正在测试自己的网站或应用程序,则可以使用它。所以你要确定,你知道你在做什么。字符串
lokaqttq2#
有几个因素会影响到这个。首先,检查您正在访问的站点是否使用大量CPU。像canvas和其他脚本这样的东西很容易占用你的CPU,特别是在使用canvas的时候。
如果你正在使用docker进行部署,请确保使用
dumb-init
。There's a nice repo here that goes into why you'd use such a thing,但本质上,在Docker镜像中分配的进程ID在处理终止时会出现一些问题:字符串
这是我在使用docker处理部署时在browserless.io上看到并解决的问题,CPU使用率就是其中之一。
7rtdyuoh3#
为了避免导致高CPU使用率的并行执行,我必须使用
p-iterationNPM包。在我的情况下,这不是一个问题,因为我的工作不需要太多的时间。
您可以根据场景使用forEachSeries或mapSeries函数。