nodejs pppeter生産実践閉坑ガイド


pppeteerはGoogleが出したヘッドレスブラウザを操作するためのフレームワークで、爬虫剤のページダウンロードモジュールを作るのはとてもいい選択です.あるサイトの専用爬虫類について書いたら、完全にnodejsを使って実現すればいいです.もしあなたが書いたのはすべての種類のウェブサイトの通用する爬虫類を登れば、詳しい言語で爬虫エンジンを書くことをお勧めします.Nodejsはページのダウンロード機としてだけ使います.これはnodejs下地層の実現とその特性に関連している.
使い方
pppeteerをkoaにセットし、Nodeがページダウンロードのインターフェースを提供し、モジュール間の松結合を実現します.
配備後の問題
メモリの問題
web 2.0ページのダウンロードについては、各ページにすべてのコンテンツがロードされ、接続が大量のメモリを占めることになります.これに対して、メモリの問題に対して以下の最適化ができます.
  • サポートの最大接続数を減らす
  • ページ中のpng/jpg/gifなどの要求に対してブロッキングを行う
  • .
  • pppeteerのPage制限ジャンプの最長待ち時間は、出現を避けるために常に
  • を待っています.
    socket hang up(接続が切断されている)
    nodejsサービスはメモリ漏れの問題が発生するようです.(今は原因が見つからないです.)だから、仕事が増えるにつれて、メモリが蓄積されて、任務応答が全体的に遅くなりそうです.そのため、ほとんどのページは待ち時間が長くなりがちですが、この場合は上記のようなpppeteerへのPage制限ジャンプの最長待ち時間を利用して、待ち時間が発生しないようにしても良いです.同時に、定期的にページダウンロードモジュールのタスクを再起動する必要があります.
    nodejsとnpmがどのように定期的にタスクを再起動する機能を実現するかは分かりませんので、このサービスに対してsystemtectlに登録する方法を利用して、systeml管理ツールを利用してサービスのオープンクローズを管理することができます.そして、crontabを利用して定期的に再起動するサービスの具体的な実践は以下の通りです.
    # the puppeteer of node service
    [Unit]
    Description=puppeteer
    
    [Service]
    TimeoutStartSec=180
    TimeoutStopSec=30
    
    # exec
    ExecStart=/usr/bin/node bin/www
    ExecStop=/usr/bin/pkill node
    # log
    StandardOutput=syslog
    StandardError=syslog
    
    クロンで2時間設定して再起動します.
    1 */2 * * * /bin/systemctl restart puppeteer.service
    
    これで簡単に乱暴にメモリ漏れによる性能低下の問題を解決できます.