1. 程式人生 > 其它 >PM2 常用命令與監控

PM2 常用命令與監控

對於後臺程序的管理,常用的工具是crontab,可用於兩種場景:定時任務和常駐指令碼。關於常駐指令碼,今天介紹一款更好用的工具:pm2,基於nodejs開發的程序管理器,適用於後臺常駐指令碼管理,同時對node網路應用有自建負載均衡功能。官方的說法,pm2 是一個帶有負載均衡功能的Node應用的程序管理器,個人認為,並不準確,因為pm2支援多種語言,只是對於除node之外的其他程序無負載均衡的能力。

一 pm2特點:

首先來說一說pm2的優點有哪些,如下:

  • 支援程序行為配置 ,即可以通過配置,實現對pm2管理應用的一些基礎屬性更新修改,如應用名稱,啟動模式等;
  • 支援叢集模式,支援負載均衡,但因採用nodejs的cluster模組實現,僅適用於nodejs程序;
  • 支援source map,此項針對js, source map檔案是js原始檔的資訊檔案,裡面儲存著原始檔的位置資訊;
  • 支援熱重啟;
  • 支援部署工作流,pm2可依據測試環境和線上環境自動部署到不同的伺服器,同時執行在不同配置下;
  • 支援監聽重啟,在檔案更新等情況下可實現程序自動重啟;
  • 支援linux的startup程序啟動,startup是指系統boot, 程序自啟動,如centos的chkconfig;
  • 日誌管理,兩種日誌,pm2系統日誌與管理的程序日誌,預設會把程序的控制檯輸出記錄到日誌中;
  • 命令自動補全功能,個人感覺這個功能意義不大,而且嘗試了一下,沒有原生的linux命令自動補全反應敏捷;
  • 監控功能,pm2 monit監控cpu和memory使用情況,keymetrics監控更為詳細;
  • 支援開發除錯模式,非後臺執行,pm2-dev start ;
  • 支援pm2模組開發,實現pm2的功能擴充套件;
  • keymetrics監控,比pm2 monit監控更為詳細友好,通過web頁面展示;
  • 最大記憶體重啟,設定最大記憶體限制,超過限制自動重啟;
  • 程式設計API,提供API供開發者通過程式設計方式靈活管理程序;

以上簡要概述了pm2程序管理工具的特點。

二 pm2常用命令

啟動 $ pm2 start app.js # 啟動app.js應用程式 $ pm2 start app.js -i 4 # cluster mode 模式啟動4個app.js的應用例項 # 4個應用程式會自動進行負載均衡
$ pm2 start app.js --name="api" # 啟動應用程式並命名為 "api" $ pm2 start app.js --watch # 實時監控app.js的方式啟動,當app.js檔案有變動時,pm2會自動reload $ pm2 start script.sh # 啟動 bash 指令碼 $pm2 start sys.config.js #啟動nodejs框架Express或Koa package.json片段:
"scripts": {
"start": "cross-env NODE_ENV=production node bin/www",
"prd": "pm2 start sys.config.js --only prod",
},

sys.config.js:
module.exports = {
apps: [{
// 生產環境
name: "prod",
// 專案啟動入口檔案
script: "bin/www",
// 專案環境變數
env: {
"NODE_ENV": "production"
}
}]
}

注意:

-i --instances:啟用多少個例項,可用於負載均衡。如果-i 0或者-i max,則根據當前機器核數確定例項數目。

檢視cpu核數參考:Linux檢視物理CPU個數、核數、邏輯CPU個數

cat /proc/cpuinfo| grep "cpu cores"| uniq
重啟 $ pm2 restart all # 重啟所有應用 過載 $ pm2 reload all # 重啟 cluster mode下的所有應用 停止 $ pm2 stop all # 停止所有的應用程式 $ pm2 stop 0 # 停止 id為 0的指定應用程式 檢視程序 $ pm2 list # 列表 PM2 啟動的所有的應用程式 $ pm2 show [app-name或 id] # 顯示應用程式的所有資訊 $ pm2 info [app-name或 id] # 顯示應用程式的所有資訊 實時監控 $ pm2 monit # 顯示每個應用程式的CPU和記憶體佔用情況 $ pm2 monit 0 # 監控批評行編號為0的程序 $ pm2 monit server.js # 監控名稱為server.js的程序 日誌 $ pm2 logs # 顯示所有應用程式的日誌 $ pm2 logs [app-name或 id] # 顯示指定應用程式的日誌 $ pm2 flush #Empty all log file $ pm2 reloadLogs #Reload all logs 刪除 $ pm2 delete all # 關閉並刪除所有應用 $ pm2 delete 0 # 刪除指定應用 id 0 升級PM2 $ npm install pm2@lastest -g #安裝最新的PM2版本 $ pm2 update #升級pm2 其他 $ pm2 gracefulReload all # Graceful reload all apps in cluster mode(優雅地重新載入叢集模式中的所有應用程式) $ pm2 scale api 10 # 把名字叫api的應用擴充套件到10個例項 $ pm2 reset [app-name] # 重置重啟數量 $ pm2 startup # 建立開機自啟動命令 $ pm2 save # 儲存當前應用列表 $ pm2 resurrect # 重新載入儲存的應用列表 $ pm2 update # Save processes, kill PM2 and restore processes $ pm2 generate # Generate a sample json configuration file 開機自動啟動

可以通過pm2 startup來實現開機自啟動。細節可參考。大致流程如下

  1. 通過pm2 save儲存當前程序狀態。

  2. 通過pm2 startup [platform]生成開機自啟動的命令。(記得檢視控制檯輸出)

  3. 將步驟2生成的命令,貼上到控制檯進行,搞定。