ちょっと前からですが、Node.jsで運用しているサービスのデーモン化ツールを
node-foreverから、node-pm2へ変更いたしました。
foreverと比較して高機能なpm2をお伝えいたします。
クラスタリング
foreverコマンドは、基本的にプロセスが生きている事を管理するのみでした。
pm2では、それはもちろんの事、使っているCPUに合わせてクラスタリングする機能が付いています。
Node.js v0.6で追加されたクラスタリング機能はソケットをネットワーク化されたNode.jsのアプリケーション間でシェアする事が出来ました。
pm2では基本機能として、追加コードなしにそれらを実装しています。pm2本体がマスタープロセスの役割をし、アプリケーションコードをクラスタリング化された子プロセスとして扱います。
すべてのCPUを使ってクラスタリングするには、
pm2 start app.js -i max
と実行するだけで簡単にクラスタリングする事が出来ます。
また、
pm2 list
と実行すれば、下の写真のような感じで一覧を見る事が出来ます。
モニタリング
pm2には、CPU使用率とメモリ使用率を表示してくれる機能もあります。pm2 monit
と実行すると、
ただし、Macではnode-usageが使えない為にpm2のmonitコマンドが使えません。誰か修正して下さい(´・ω・`)
ログ収集
pm2では、クラスタリング化された複数のプロセスを見る必要があります。今までの方法では、tail -f /path/to/log1 /path/to/log2 ...
と、複数のファイルを指定していましたが、pm2では、
pm2 logs
と入力するだけで、すべてのログを管理出来ます。
もちろん、1つ1つのプロセスは別のログファイルに分けられているので、tailコマンドで1つを追うことも出来ます。
JSONでの設定
複数のNode.jsアプリケーションを実行するのに、1つ1つ実行する必要はありません。プロセス管理用のJSONファイルを設定すれば、それ1つですべてのNode.jsアプリケーションの実行が可能です。
[{ "name" : "echo", "script" : "./examples/echo.js", "max" : "10", "instances" : "max", "args" : "-d 1" },{ "name" : "api", "script" : "./examples/child.js", "instances" : "4" },{ "name" : "bus", "script" : "./examples/echokill.js" }]
と、設定ファイルを書き、
pm2 start processes.json
と実行すると、設定したすべてのアプリケーションを実行してくれます。
最後に
foreverからpm2への切り替えに30秒ほどアクセス出来ませんでしたが、アプリケーション側の変更は特に無く切り替える事が出来ました。
あとはログローテートが出来れば・・・。そのうちやります。
node-foreverの記事はこちら:【AWS】EC2のCentOS6.0にNode.jsでproxy serverを立ててapacheと共存させる
ログローテートはこちら:【Node.js】expressでaccess log + log rotate
(なぜか人気記事になったので、湘南社中をよろしくお願いします。と言っておきます。)
0 件のコメント:
コメントを投稿