結論はじめにさくらVPSにWebスクレイピング用途でPuppeteerアプリケーションを置いて毎日定時実行していましたが、スクレイピングの関数をマルチで実行すると動いていなかったようだったのでマルチスレッドで起動する方法を調べました。スクレイピングを関数単位でcronで時刻指定起動していたんですが、時刻がバッティングするとほぼ落ちていました。chromeのプロセスが残ってそれ以降の時刻指定のジョブが動かないという。自動ツールってめちゃくちゃ便利ですけど、動かない時のダメージがでかいんですよね。Puppeteerの基本的な使い方はこちらの記事で紹介しています。サーバの性能を確認する同じ事象が発生している人はまず、サーバの処理性能を確認して見ましょう。puppeteerってchromeを動かすのでCPUやメモリ消費が大きいです。さくらVPSの一番安いプラン(615円/月)はメモリ512MB、CPU1Coreなので、これだとシングルで動かさないと無理でした。Pro2016だと全然同じ問題が発生しておらず、4多重ぐらいまでなら平気で動きました。いえ、何も気にせず多重化すると再現しそうなため注意が必要です。性能測定ツール実際には性能測定ようではないのですが、puppeteer-clusterというpuppeteerを並列で動かせるパッケージがあります。(自分はうまく操作できなかったのですが。)そのパッケージでmonitorというオプションを設定するとその処理で消費している性能が確認できます。Linuxで性能簡単に取れる人はいいですが、手っ取り早く確認したい人にはおすすめです。(MacBookPro2016でシングルスレッドでCPU27.3%、メモリ88.8%です)puppeteer-clusterのmonitor機能4多重あたりからメモリ100%近くなって不安定になります。4多重でpuppeteerを実行した時のリソース消費量インストールはこちらから=>puppeteer-clusterのGithubのページpuppeteer-clusterを使うためにはコードの関数内で多重処理を記述することができるっぽい。(私はできませんでしたが泣)ただ、リソース状況がアウトなので、別の対策が必要と思われます。Puppeteerのスクレイピングを同期的に呼び出す(Async/await)そこで、運用的な回避方法になりますが、1つのWebスクレイピングごとにcronで時刻指定するのではなく、Async/awaitでWebスクレイピングを複数個まとめて同期的に呼び出すことで重複を避けることができました。具体的なコードは以下の記事で解説しています。https://kennejs.com/entry/2019/01/31/000514Async/awaitの基本的な使い方は以下の記事を参照ください。https://kennejs.com/entry/2019/01/27/163128結論そもそもPuppeteerは並列で動かせますが、リソースとの問題が発生します。リソースが厳しい環境ではコードに工夫が必要になります。puppeteer-clusterはもう少し触っていきたいです。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。USケネはじめまして、ケネです。Node.jsの技術情報を書いています。一人でも多くの方と「自分でもできた」感覚を共有したいので、なるべくわかりやすく、実体験ベースでのブログを心がけています。技術で自分の世界を広げましょう。不明点や質問があればお気軽にコメントください。