Node.js系列 :使用 PM2 來管理Node.js 服務

jessweb3
·
·
IPFS
·

當我們開發完 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 的基本使用,真的是非常簡單好用,希望大家會喜歡!

CC BY-NC-ND 2.0 授权

喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!

jessweb3youtube: https://www.youtube.com/channel/UCgH6CL6wswgYuaKIVXa5iOw linkedin: https://www.linkedin.com/in/tengwen/ 熱愛分享技術、讀書、享受生活
  • 来自作者
  • 相关推荐

區塊鏈系列 — 以太坊工作原理 (中)

區塊鏈系列 - 以太坊工作原理 (上)

多執行緒系列:Blocking Queue 概念與實作