Node.js系列 :使用 PM2 來管理Node.js 服務
當我們開發完 Node.js 應用時,需要將應用部署至 Production 環境 ( 例如 AWS EC2 ) 供客戶使用。在持續維護 Production 環境時會發現,最大的挑戰來自於要讓程式持續、穩定不中斷的運行。另外由於 Node.js 本身是單執行緒,所以要擴展也是不容易的。這時候 PM2 就有出場的空間了,使用後覺得真的是非常方便,用起來很享受!推薦給大家!
什麼是 PM2 ?
PM2 是 node.js 的程序管理器,它有內建的附載均衡器,這使得擴展變得非常容易,另外它是跨平台的,可以運行在 Windows,Linux 和 MacOS。
讓我們要開始使用 PM2 時,可以先寫一個設定檔 config.json ,裡面可以設定你要運行的進程名稱和服務起來的 instance 數量,當運行 PM2 時只要指定這個設定檔就好,PM2 接著就會照著設定處理其他所有的部分。
PM2 我覺得最棒的是可以讓你的程序一直啟動不 crash,並且當程式碼更改時在不中斷服務情況下更新服務。
PM2可以解決什麼問題 ?
- pm2 可以讓 node 服務 crash 掉之後,自動幫我們重啟
- pm2 可以在 server 重啟之後,自動幫我們重啟
- pm2 可利用 CPU 多核,開啟多程序,用以達到類似負載平衡的效果
- pm2 提供多項監測資訊,包含已重啟次數、 CPU 用量、 memory 用量, process id, 等等…
- pm2 提供簡單的部署方式,可一次性部署到多台 server
安裝
npm
npm install pm2@latest -g
yarn
yarn global add pm2
啟動
pm2 start location/insex.js --name appName \ --watch true \ --max-memory-restart 600M \ --log ~/.pm2/logs/appName/ \ --time true \ --cron "0 17 * * *" \ --no-daemon true \ --merge-logs
啟動服務時可以帶入非常多的參數:
- --name
- 指定服務名稱
- --watch
- 設定為 true 則檔案有變更時,會自動重新啟動
- --max-memory-restart
- Memory 使用超過這個門檻時,會自動重啟服務
- --log
- 指定 log 的位址
- --output
- 指定 output log 位址
- --error
- 指定 error log 位址
- --log-date-format
- 指定 log 的格式
- --merge-logs
- 同一個 app 跑多執行緒時,不要依據程序 id 去分割 log,全部合在一起
- --cron
- 指定 cron 頻率,時間到時強制重啟
- -i max
- pm2 會自動偵測該機器的 CPU 數量,啟動最大能負荷的 process,這對於效能提升非常有幫助
管理服務
$ pm2 restart app_name $ pm2 reload app_name $ pm2 stop app_name $ pm2 delete app_name
以上都是字面上的意思,非常簡單好用。
查看Log
- 輸出Log
pm2 logs
- 顯示指定行數 log (指定倒數 n 行)
pm2 logs --lines 500
- 指定輸出某服務的 log
pm2 logs app_name
- 可將 log 格式輸出指定為 json
pm2 logs --json
- 清空所有 log
pm2 flush
監測 node 服務狀態
pm2 monit
以上就是 PM2 的基本使用,真的是非常簡單好用,希望大家會喜歡!