pm2概要
Node.js のアプリケーションは単一プロセス・単一スレッドで動作するという特性がある。ということはマルチコアCPUであってもそれを有効に使うことができない。
これを解消する方法は2つある。一つ目は cluster モジュールを使うこと。このモジュールを使えばマルチプロセスを扱うことができる。二つ目はプロセス管理ツールを使うことだ。pm2 はそのプロセス管理ツールのひとつ。
主なコマンド
主なコマンドについて。詳細は pm2 -h
で確認すること。
pm2 start pm2.yaml
pm2 restart app_name
pm2 kill
– デーモンを停止するpm2 list
/pm2 ls
/pm2 status
/pm2 ps
– プロセスの一覧を表示する。どれも同じ内容pm2 logs
– ログファイルのストリームを表示。デフォルトでは全てのログが出力されるがオプションでフィルタリングしたりアプリ指定もできるpm2 monit
– termpcap 形式でモニタリングできる
トラブルシューティング
too many unstable restarts
再起動時に pm2 logs
で以下のエラーが発生。pm2 status
を見ると status が Errored になっていた。
PM2 log: App name:app id:1 disconnected
PM2 log: App [app:4] exited with code [0] via signal [SIGINT]
PM2 log: Script index.js had too many unstable restarts (16). Stopped. “errored”
PM2 log: App [app:4] exited with code [0] via signal [SIGINT]
PM2 log: Script index.js had too many unstable restarts (16). Stopped. “errored”
エラーログを見ると以下のログ。
Error: Cannot find module ‘module_name’
pm2 kill
をしてから再度起動すると解決した。
その他
docker では pm2-runtime を使う
Docker コンテナ内では pm2 をグローバルインストールした状態で pm2-runtime
コマンドを使う。
.pm2
実行ユーザのホームディレクトリ下に .pm2/
というディレクトリが作成されて、デーモンプロセスの情報がここに残る。起動後に別のユーザでログインして pm2 を使っても元のプロセスの情報を得られない。
.pm2 フォルダは環境変数 PM2_HOME
に作成されるため、環境変数を設定することでどのユーザで実行しても pm2 の状況を確認できるようにすることも可能。ただし環境変数の設定だけではアクセス権が足りないので、実行ユーザ以外でプロセスを操作することはできない。$PM2_HOME
の権限変更も忘れないこと。
.pm2との付き合い方