pm2 是 node 進程管理工具,能夠利用它來簡化不少 node 應用管理的繁瑣任務,如性能監控、自動重啓、負載均衡等,由於在工做中遇到服務器重啓後,須要一個個去從新啓動每一個服務,這樣不只繁瑣、效率低,並且容易遺忘開啓一些服務,因此特意對 pm2 進行一次比較全面的學習+實踐,在解決工做問題的同時,進行一次較完整的學習實踐總結,現分享給你們。javascript
博客 github地址爲:github.com/fengshi123/… ,彙總了做者的全部博客,也歡迎關注及 star ~html
一、運行如下命令進行全局安裝java
$ npm install -g pm2
複製代碼
二、安裝完以後,會自動建立如下目錄:node
$HOME/.pm2/logs // 包括全部應用的日誌
$HOME/.pm2/pids // 包括全部應用的 pids
$HOME/.pm2/dump.pm2 // 開機自啓動配置
$HOME/.pm2/pm2.log // pm2 日誌
$HOME/.pm2/pm2.pid // pm2 pid
複製代碼
一、啓動命令linux
$ pm2 start app.js
複製代碼
啓動成功後,咱們對應能夠看到啓動的服務的一些信息,以下所示:git
二、命令行參數github
咱們能夠在最基本的啓動命令後面,添加一些參數選項,去知足咱們的需求,經常使用的參數選項以下所示:express
咱們在啓動命令後面加入以上的一些參數,完整的啓動命令以下所示:npm
$ pm2 start app.js --watch -i max -n first_app
複製代碼
啓動成功後的截圖以下,咱們經過截圖能夠看到啓動的應用名稱變爲 first_app,而後啓動四個進程,說明咱們在啓動命令後面添加的參數已經起做用。json
三、重啓命令
$ pm2 restart app.js
複製代碼
四、中止命令
中止特定的應用,能夠經過 pm2 list 先獲取應用的名字或者進程的 id,而後再調用如下命令中止相應的應用;
$ pm2 stop app_name | app_id
複製代碼
若是須要中止所有的應用,則使用如下命令:
$ pm2 stop all
複製代碼
五、刪除命令
刪除特定的應用,能夠經過 pm2 list 先獲取應用的名字或者進程的 id,而後再調用如下命令刪除相應的應用;
$ pm2 delete app_name | app_id
複製代碼
若是須要刪除所有的應用,則使用如下命令:
$ pm2 delete all
複製代碼
六、查看有哪些進程
$ pm2 list
複製代碼
七、查看某個進程的信息
$ pm2 descripe app_name | app_id
複製代碼
相應的進程信息輸出以下所示:
若是咱們使用命令行參數定義一些選項,那麼每次啓動進程時,都須要敲上一大堆的命令,很是繁瑣;因此咱們可使用配置文件來將命令行參數進行配置,配置文件裏的配置項跟命令行參數是基本一致的;以下所示,咱們在 express_project 項目 中添加 pm2 的配置文件 pm2.json ,而後在 package.json 文件中配置啓動命令 "pm2": "pm2 start pm2.json" ,這樣咱們只須要運行 npm run pm2 就可使用 pm2 啓動咱們的 express 項目,而且相關運行參數直接在 pm2.json 中配置好了。相關配置項表示的意義在下面文件中都已經註釋說明,就不在一一解釋了。
{
"apps": {
"name": "express_project", // 項目名
"script": "app.js", // 執行文件
"cwd": "./", // 根目錄
"args": "", // 傳遞給腳本的參數
"interpreter": "", // 指定的腳本解釋器
"interpreter_args": "", // 傳遞給解釋器的參數
"watch": true, // 是否監聽文件變更而後重啓
"ignore_watch": [ // 不用監聽的文件
"node_modules",
"public"
],
"exec_mode": "cluster_mode", // 應用啓動模式,支持 fork 和 cluster 模式
"instances": "max", // 應用啓動實例個數,僅在 cluster 模式有效 默認爲 fork
"error_file": "./logs/app-err.log", // 錯誤日誌文件
"out_file": "./logs/app-out.log", // 正常日誌文件
"merge_logs": true, // 設置追加日誌而不是新建日誌
"log_date_format": "YYYY-MM-DD HH:mm:ss", // 指定日誌文件的時間格式
"min_uptime": "60s", // 應用運行少於時間被認爲是異常啓動
"max_restarts": 30, // 最大異常重啓次數
"autorestart": true, // 默認爲 true, 發生異常的狀況下自動重啓
"restart_delay": "60" // 異常重啓狀況下,延時重啓時間
"env": {
"NODE_ENV": "production", // 環境參數,當前指定爲生產環境
"REMOTE_ADDR": ""
},
"env_dev": {
"NODE_ENV": "development", // 環境參數,當前指定爲開發環境
"REMOTE_ADDR": ""
},
"env_test": { // 環境參數,當前指定爲測試環境
"NODE_ENV": "test",
"REMOTE_ADDR": ""
}
}
}
複製代碼
可使用 -i 參數配置集羣數,實現負載均衡,相關命令以下,能夠查看 官網章節;
$ pm2 start app.js -i 3 // 開啓三個進程
$ pm2 start app.js -i max // 根據機器CPU核數,開啓對應數目的進程
複製代碼
咱們能夠經過打開日誌文件查看日誌外,還能夠經過 pm2 logs 來查看實時日誌,這點有對於線上問題排查;日誌查看命令以下:
$ pm2 logs
複製代碼
則咱們能夠在命令窗口實時看到日誌輸出:
咱們可使用如下命令,查看當前經過 pm2 運行的進程的狀態;
$ pm2 monit
複製代碼
動態監控界面以下所示:
咱們可使用 --max-memory-restart 參數來限制內存使用上限,當超過使用內存上限後自動重啓;
$ pm2 start app.js --max-memory-restart 100M
複製代碼
在 linux 中,設置開機自啓動,只須要執行如下兩個步驟:
pm2 startup
,即在/etc/init.d/ 目錄下生成 pm2-root 的啓動腳本,且自動將 pm2-root 設爲服務;pm2 save
,會將當前 pm2 所運行的應用保存在 /root/.pm2/dump.pm2 下,當開機重啓時,運行pm2-root 服務腳本,而且到 /root/.pm2/dump.pm2 下讀取應用並啓動;但在 windows 中運行 pm2 startup 時,會報如下錯誤,由於其不適合 windows 系統;
咱們須要額外安裝其它庫,以下所示:
$ npm install pm2-windows-startup -g
$ pm2-startup install
複製代碼
而後咱們只須要運行如下保存命令,就能夠將如今正在運行的服務添加到開機自啓動命令中;後面即便服務器開機重啓,也會將咱們保存的服務自動重啓;
$ pm2 save
複製代碼
本文講述了 pm2 安裝、pm2 基本經常使用命令、pm2 配置文件、以及 pm2 的高階應用,經過本文的閱讀,基本可以使用 pm2 來管理你的 node 應用,至於一些不經常使用的特性,能夠訪問 pm2 官網; 而且經過本文的實踐,做者還優化了以前開源的 express 項目的 pm2 管理,對應的博客文章《一個開箱即用,功能完善的 Express 項目》,但願對你有幫助。
博客 github地址爲:github.com/fengshi123/… ,彙總了做者的全部博客,也歡迎關注及 star ~
參考文獻: