Nodejsに5ページを同時にスクレイピングする操り人形師のスクレイピングアルゴリズムがあり、1ページで終了すると、キューから次のURLを取得して、同じページで開きます。 CPUは常に100%です。操り人形師のCPU使用量を減らす方法は?
このプロセスは、4GBのRAMと2つのvCPUを備えたdigitaloceansドロップレットで実行されています。
いくつかの引数を使用して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();
});
私のデフォルトの引数、それをテストして、これがスムーズに実行されるかどうか教えてください。
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)
CPU使用率が高くなる並列実行を回避するために、を使用してジョブを順番に実行する必要がありました
p-iteration NPMパッケージ。私の場合、仕事に時間がかからないので問題ありません。
シナリオに応じて、forEachSeriesまたはmapSeries関数のいずれかを使用できます。
これに影響を与える可能性のあるいくつかの要因があります。まず、アクセスしているサイトが多くのCPUを使用しているかどうかを確認します。キャンバスやその他のスクリプトのようなものは、特にキャンバスの使用に関しては、CPUを簡単に噛み砕くことができます。
Dockerを使用してデプロイを行う場合は、必ずdumb-init
を使用してください。 ここにwhyあなたがそのようなものを使用する理由に入る素敵なリポジトリがあります 、しかし本質的に割り当てられるプロセスID Dockerイメージでは、終了の処理に関していくつかの問題があります。
EXPOSE 8080
ENTRYPOINT ["dumb-init", "--"]
CMD ["yarn", "start"]
これは私が目撃して修正したものです browserless.io dockerを使用してデプロイメントを処理し、CPU使用率もその1つです。