Skip to main content

pm2

pm2 解決什麼問題?

  • pm2 可以讓 node 服務 crash 掉之後,自動幫我們重啟

  • pm2 可以在 server 重啟之後,自動幫我們重啟

  • pm2 可利用 CPU 多核,開啟多程序,已達到類似負載平衡的效果

    • Graceful reload 可達成類似 rolling upgrade 的效果,0 downtime 升級
    • 多程序多服務,可提升處理 request 的速度
    • 可設定 cron 排程自動重啟時間
  • pm2 提供多項資訊,包含已重啟次數、 CPU 用量、 memory 用量, process id, 等等…

  • pm2 可以在指定的條件下,自動幫我們重啟,條件可以是’up time’, ‘已使用多少 memory’, 等等…,

  • pm2 可以幫我們整理 log, 讓 log 以我們想要的週期分割檔案,並保存我們想要的數量,若有超過,自動刪除。

  • pm2 提供簡單的部署方式,可一次性部署到多台 server

  • pm2 可與 CD / CD 工具做結合, CI / CD 部署也沒有問題

pm2的操作

安裝PM2

npm install pm2 -g

啟動服務

pm2 start app.js
pm2 start ecosystem.config.cjs

重啟服務

npm restart SERVICE_NAME

刪除Process

pm2 delete SERVICE_NAME

停止Process

pm2 stop SERVICE_NAME

設定記憶體使用超過多少後自動重啟伺服器

pm2 start app.js --max_memory_restart 1024M

監控服務

pm2 monit

監控 log

pm2 log

設定開機自動啟動 pm2

pm2 startup

儲存現在 pm2 的狀態

pm2 save

啟動可以附加的參數

  • --name 指定 app 一個名字
  • --watch 檔案有變更時,會自動重新啟動
  • --max-memory-restart Memory 使用超過這個門檻時,會自動重啟
  • --log 指定 log 的位址, 若要指定新位址,需將原本的 process 刪掉,再重新啟動指定
  • --output 指定 output log 位址
  • --error 指定 error log 位址
  • --log-date-format 指定 log 的格式
  • --merge-logs 同一個 app 跑多程序時,不要依據程序 id 去分割 log, 全部合在一起
  • --arg1 --arg2 --arg3 指派額外的參數
  • --restart-delay 自動重啟時,要 delay 多久
  • --time 給 log 加上前綴
  • --no-autorestart 不要自動重啟
  • --cron 指定 cron 規律,強制重啟
  • --no-daemon 無 daemon 模式, listen log 模式
  • --spa 限定 serve 使用, 會重導所有的請求到 index.html
  • --basic-auth-username --basic-auth-password 用於靜態檔, 讓該頁面需要帳號密碼方可存取

查看服務進程數

查看物理CPU个数

cat /proc/cpuinfo| grep "physical id" | sort| uniq | wc -l

查看每個物理CPU中的核數

cat /proc/cpuinfo| grep "cpu cores"| uniq

查看邏輯CPU的個數

cat /proc/cpuinfo| grep "processor"| wc -l

參考文章

https://blog.learn-or-die.com/zh-tw/pm2/#pm2-%E8%A7%A3%E6%B1%BA%E4%BB%80%E9%BA%BC%E5%95%8F%E9%A1%8C%EF%BC%9F

https://ithelp.ithome.com.tw/articles/10223157

https://wayne265265.pixnet.net/blog/post/117947411-%E5%A5%BD%E7%94%A8%E7%9A%84process-manager%2C-pm2