Raspberry Pi 4 でWebクローラ
常時動作のWebクローラを作る必要が出てきたのですが、Webページの解析ってすごく重いので、AWSやらGCPやらを使うと、プリエンプティブルなインスタンスでも結構な費用になってしまいます。
自宅でサーバも邪魔だなと思ってたのですが、ちょっと前に買ったRaspberryPi 4が余ってたので、これを使って自宅サーバ(自宅クローラ?)を構築することにしました。
メモリは8Gだが、OSは32Bit版でOK
搭載メモリ8Gなので、64Bit版のRaspberry Pi OS が必要かと思ったのですが、どうやら、32Bit版でも1プロセスあたりの最大メモリが3Gに制限されるだけで、システム全体としては8Gちゃんと使ってくれるらしいです。
Webページの解析にnode.jsとブラウザを使うだけなので、1プロセスあたりのメモリは3Gあれば十分です。64Bit版のOSはBeta版なので、32Bit版を使うことにしました。
puppeteer が動かない
node.jsでchromiumを操作してWebページを解析する作りにしてたのですが、Rapberry Pi OS 上で下のようなエラーが出て puppeteer が起動しません。
1 |
popper_test/node_modules/puppeteer/.local-chromium/linux-756035/chrome-linux/chrome: Syntax error: "(" unexpected |
内蔵の chromium の起動に失敗してるっぽいので、下記のように Raspberry Pi OS にインストール済みの chromium を起動するように指定したら、問題なく動作しました。
1 |
browser = await puppeteer.launch({executablePath: '/usr/bin/chromium-browser'}); // Raspberry pi |
コア数の2倍がちょうど良さそう
ブラウザを6タブ開き、連続でページ読み込みを実行したところ、CPU負荷80%くらいで安定しました。回線速度にもよると思いますが、8タブ同時くらいがちょうど良さそうです。GCP上で実験した時も、コア数の2倍のタブを使った条件が最も効率が良かったので、現状のWebサーバの応答速度とWebページの作りでは、コア数の二倍くらいが効率が良いのかもしれません。
熱い、熱すぎる
Raspberry Pi 4 をヒートシンクもファンも無しで動かしてたのですが、数分で基板全体が熱くて触れなくなるくらい発熱しました。
CPUに連続で負荷をかける場合、冷却ファン必須ですね。
とりあえず使えそう
発熱以外は特に問題なさそうな感じです。Amazon で冷却ファン付きケース(¥1,199)を注文したので、これが来れば問題なく運用できそうです。