pm2 實踐指南

前言

pm2 是 node 進程管理工具,能夠利用它來簡化不少 node 應用管理的繁瑣任務,如性能監控、自動重啓、負載均衡等,由於在工做中遇到服務器重啓後,須要一個個去從新啓動每一個服務,這樣不只繁瑣、效率低,並且容易遺忘開啓一些服務,因此特意對 pm2 進行一次比較全面的學習+實踐,在解決工做問題的同時,進行一次較完整的學習實踐總結,現分享給你們。javascript

博客 github地址爲:github.com/fengshi123/… ,彙總了做者的全部博客,也歡迎關注及 star ~html

1、安裝 & 目錄

一、運行如下命令進行全局安裝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
複製代碼

2、經常使用命令

一、啓動命令linux

$ pm2 start app.js
複製代碼

啓動成功後,咱們對應能夠看到啓動的服務的一些信息,以下所示:git

1

二、命令行參數github

咱們能夠在最基本的啓動命令後面,添加一些參數選項,去知足咱們的需求,經常使用的參數選項以下所示:express

  • --watch:監聽應用目錄的變化,一旦發生變化,自動重啓。
  • -i or --instance:啓用多少個實例,可用於負載均衡,若是 -i 0 或者 -i max,則根據當前機器核數肯定實例數目。
  • --ignore-watch:排除監聽的目錄或文件,能夠是特定的文件名,也能夠是正則。
  • -n or --name:應用的名稱,查看應用信息的時候能夠用到。
  • -o or --output path:標準輸出日誌文件的路徑。
  • -e or --error path:錯誤輸出日誌文件的路徑。

咱們在啓動命令後面加入以上的一些參數,完整的啓動命令以下所示:npm

$ pm2 start app.js --watch -i max -n first_app
複製代碼

啓動成功後的截圖以下,咱們經過截圖能夠看到啓動的應用名稱變爲 first_app,而後啓動四個進程,說明咱們在啓動命令後面添加的參數已經起做用。json

2

三、重啓命令

$ 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
複製代碼

相應的進程信息輸出以下所示:

3

3、配置文件

若是咱們使用命令行參數定義一些選項,那麼每次啓動進程時,都須要敲上一大堆的命令,很是繁瑣;因此咱們可使用配置文件來將命令行參數進行配置,配置文件裏的配置項跟命令行參數是基本一致的;以下所示,咱們在 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": ""
        }
    }
}
複製代碼

4、高階應用

一、負載均衡

可使用 -i 參數配置集羣數,實現負載均衡,相關命令以下,能夠查看 官網章節

$ pm2 start app.js -i 3 // 開啓三個進程
$ pm2 start app.js -i max // 根據機器CPU核數,開啓對應數目的進程 
複製代碼

二、日誌查看

咱們能夠經過打開日誌文件查看日誌外,還能夠經過 pm2 logs 來查看實時日誌,這點有對於線上問題排查;日誌查看命令以下:

$ pm2 logs
複製代碼

則咱們能夠在命令窗口實時看到日誌輸出:

三、監控

咱們可使用如下命令,查看當前經過 pm2 運行的進程的狀態;

$ pm2 monit
複製代碼

動態監控界面以下所示:

5

四、內存超過使用上限自動重啓

咱們可使用 --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 系統;

6

咱們須要額外安裝其它庫,以下所示:

$ npm install pm2-windows-startup -g
$ pm2-startup install
複製代碼

而後咱們只須要運行如下保存命令,就能夠將如今正在運行的服務添加到開機自啓動命令中;後面即便服務器開機重啓,也會將咱們保存的服務自動重啓;

$ pm2 save
複製代碼

5、總結

本文講述了 pm2 安裝、pm2 基本經常使用命令、pm2 配置文件、以及 pm2 的高階應用,經過本文的閱讀,基本可以使用 pm2 來管理你的 node 應用,至於一些不經常使用的特性,能夠訪問 pm2 官網; 而且經過本文的實踐,做者還優化了以前開源的 express 項目的 pm2 管理,對應的博客文章《一個開箱即用,功能完善的 Express 項目》,但願對你有幫助。

博客 github地址爲:github.com/fengshi123/… ,彙總了做者的全部博客,也歡迎關注及 star ~

參考文獻:

www.cnblogs.com/chyingp/p/p…

pm2.keymetrics.io/docs/usage/…

相關文章
相關標籤/搜索