PM2
Node.jsのprocess manager
デプロイ
自動起動
マルチプロセス
website
docs
github
commands
$ pm2 status
$ pm2 listも同じ結果になる
$ pm2 start hoge
$ pm2 start -i <n>
cluster modeで起動
<n>にinstance数を指定する
-i 0は特殊で、マシンのコア数が指定される
$ pm2 restart hogehoge
$ pm2 stop hoge
$ pm2 delete hoge
$ pm2 logs
$ pm2 monit
イカツイ画面になってmonitoringできる
λ pm2 startup
類似
StrongLoop Process Manager
http://strong-pm.io/
forever
https://github.com/foreversd/forever
参考
PM2を用いて本番環境でNodeJSアプリを動かす - YoheiM .NET
概要
#WIP
statusの見方
table:a
id name mode ↺ status cpu memory
0 hogehoge fork 21 online 0% 61.1mb
↑restartした回数かな
ecosystem.config.js
https://pm2.keymetrics.io/docs/usage/application-declaration/
PM2のconfig file
複数アプリの設定を書いたり、環境ごとの設定を書いたりできる
--max-memory-restart
https://pm2.keymetrics.io/docs/usage/memory-limit/
mode
folk
#??
起動したアプリ自体がリクエストを受け取る
cluster
#??
pm2のマスターノードがリクエストを受け取り、それを起動中のインスタンスに割り振る
load balancingしてくれる
複数instanceを立ち上げている
https://pm2.keymetrics.io/docs/usage/cluster-mode/
落ちた時に自動的に再起動してくれる
ランタイム・パフォーマンスとリソース使用量に関するインサイトを得る
よくわからん #??
パフォーマンスを向上させるために設定を動的に変更する
クラスタリングを制御する
command optionでもできるが、設定ファイル化するのも簡単
ダウンタイム無しでdeployできる
#??
普通にnpm startとかでexpressを起動するのと何が違うの? ref
基本的にはCPU1コアしか使えず、マルチコアに対応するのに手間がかかる
シングスプロセス
シングルスレッド
errorが起きてプロセスが落ちると停止してしまう
更新する際にダウンタイムが生じる
ログ出力や状態チェックなど自前で作る必要がある
その他、本番運用のための細かな手間がある
複数instanceを立てられるのは良いとして、
1個が死んだ時に、それを自動で再起動したりはしてくれるの?
https://expressjs.com/ja/advanced/pm.html
https://pm2.keymetrics.io/docs/usage/quick-start/
https://speakerdeck.com/akkunchoi/node-dot-jssahaahurikesiyonfalse-jia-dong-fang-fa-ji-ben-karadockermate?slide=14
https://qiita.com/poruruba/items/10df0d94e9127797498f