1. 程式人生 > >你所不知道的pm2

你所不知道的pm2

01.png

【pm2】

如官網介紹的,pm2是nodejs下先進的,生產程序管理器,

安裝

1 npm  install  -g pm2

常用命令

1 2 3 4 5 6 pm2 start app.js --name demo pm2 stop demo pm2 restart demo pm2 delete demo pm2 show demo pm2 list

熟悉以上命令基本可以滿足日常的使用需求。


【pm2可以作為靜態檔案伺服器】

日常開發中還會碰到一種需求,就是前端會開發一些靜態頁面,

開發完畢後想跑起來,讓其他人遠端看看效果,

這個時候就尷尬了,一般是會把靜態檔案丟給java,php,node的人讓幫忙跑起來,

當然npm也有一些靜態檔案伺服器,例如sts,

使用方法如下:

1 2 npm 
install  -g sts sts port

這裡就可以跑起一個靜態檔案伺服器。


在看pm2文件之前,我的電腦上一直安裝有pm2和sts兩個npm包,

pm2用來啟動nodejs開發的服務,sts用來偶爾啟動靜態檔案伺服器,

看了pm2文件後才發現一直是多此一舉,想想也是,

pm2這麼強大的程序管理工具,怎麼可能不支援靜態檔案伺服器,


使用pm2啟動靜態檔案伺服器的方法如下:

1 2 pm2 serve path port pm2 serve . 9001

這樣就可以把當前資料夾下的靜態檔案跑起來了,而且埠號是9001,

同樣也支援進階的使用,如下

1 pm2 serve . 9001 --name  test  -- watch

這樣就啟動了一個名字為test,埠號為9001,且監聽檔案變化的靜態檔案伺服器

3.png


pm2 serve文件:http://pm2.keymetrics.io/docs/usage/expose/


【pm2可以監聽檔案修改】

前端開發久了都會接觸一些監聽檔案修改的工具,

好處是當檔案修改後可以自動重新整理頁面,不需要手動重新整理頁面,或者不需要重啟node,

之前對於靜態檔案的監聽一直使用的browsersync,

這裡有一篇文章介紹:http://uikoo9.com/blog/detail/browsersync

後端的檔案修改之前一直是有修改重啟node,做法比較low,


監聽檔案的需求分為兩類

1.監聽靜態檔案修改,並自動重新整理頁面

2.監聽server檔案修改,並自動重啟服務


對於1,pm2可以監聽靜態檔案,但是並沒有做到自動重新整理頁面這一步,

對於2,browsersync做不到,pm2可以做到,

所以最佳實踐是用pm2啟動node服務,並監聽server檔案的修改,

同時通過pm2 config檔案的方式啟動browsersync,監聽靜態檔案修改


普通的監聽如下

1 pm2 start app.js --name  test  -- watch

執行後,watching那一項會變成enabled,並且在修改專案下檔案的時候會重啟服務

複雜的監聽需要配置檔案配合,見後面的配置檔案講解。


pm2 watch文件:http://pm2.keymetrics.io/docs/usage/watch-and-restart/


【pm2的monit】

之所以使用pm2這類程序管理工具,而不是直接用node跑起來,

是因為程序公里工具可以更方便的監控一些資訊,包括cpu,記憶體,日誌,異常,其他資訊等,


pm2自帶一個簡單的監控工具,使用方法如下:

1 pm2 monit

執行後的效果如下

04.png


自帶的工具已經可以很好的監控程序了,pm2還提供線上web方式的監控,

首先需要登入這裡:https://app.keymetrics.io

然後按照教程一步一步來,最關鍵的是要在你的伺服器上執行:

1 pm2 link ak sk

將ak,sk替換為你自己的key即可,

然後就可以在這個網頁看到監控的效果:

05.png


有沒有感到效果很贊,不過免費版只能監控4個程序,

上面只是pm2對一些基礎資訊的監控,

pm2還提供一些pm2外掛,安裝這些外掛後可以監控,

例如pm2-mysql外掛,安裝後可以監控pm2程序中使用mysql的情況,

這些外掛包括:

06.png

07.png

08.png

09.png

10.png

12.png

13.png

15.png

16.png

17.png


是不是很豐富呢,具體的使用方法也簡單,這裡以pm2-server-monit為例,

在伺服器上安裝:pm2 install pm2-server-monit,

pm2會呼叫npm去下載這個包,下載完畢後會自動跑起來,

這是時候就能看到pm2-server-monit這個module了,並且web端也可以看到監控資訊,

19.png

20.png


pm2 monit文件:http://pm2.keymetrics.io/docs/usage/monitoring/

pm2 module進階使用:http://pm2.keymetrics.io/docs/advanced/pm2-module-system/


【pm2還可以負載均衡】

看完文件還有一個亮點是pm2支援負載均衡,

正常的pm2啟動專案如下,啟動後只對應一個程序:

1 pm2 start app.js --name  test


pm2還支援負載均衡,準確的說是單機基於多cpu核心的負載均衡,

1 pm2 start app.js --name  test  -i num

其中num可以為:

0,max,這個時候會跑滿你的核心,如果你是8核心,pm2就會跑8個程序,

數字,寫幾就會跑幾個程序

這樣啟動後mode會為cluster,如下

1.png


這個功能還是比較實用的,如果你的伺服器是多核心的,跑了一個專案,

這個時候就可以用到了,一臺伺服器跑多個程序,比較贊


pm2 cluster文件:http://pm2.keymetrics.io/docs/usage/cluster-mode/


【pm2配置檔案】

pm2啟動方式分為命令列+引數啟動,配置檔案啟動,如下

1 pm2 start config.js

大部分命令都可以作用到配置檔案上,


常用的配置檔案項:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 module.exports = {      apps : [{          // 啟動後的name,相當於:pm2 start app.js --name 71_nova          name                 :  '71_nova' ,                    // 啟動的入口          script                :  'app.js' ,                    // app.js的位置          cwd                    :  'z:/workspaces/_nova_04_api/webroot-dev/' ,                    // 負載均衡模式,使用2個核心,相當於:pm2 start app.js -i 2          instances             :  '2' ,          exec_mode             :  'cluster' ,                    // 監聽檔案修改,相當於:pm2 start app.js --watch          watch                : [ 'server' ],          ignore_watch        : [ 'server/fore' ],                    // 最大記憶體佔用,相當於:pm2 start app.js --max_memory_restart 20M          max_memory_restart    :  '100M' ,                    // 日誌相關          log_date_format        :  'YYYY-MM-DD HH:mm Z' ,          error_file            :  'd:/error.log' ,          out_file            :  'd:/out.log'      }] };


pm2 config文件:http://pm2.keymetrics.io/docs/usage/application-declaration/


【pm2命令】

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 //  安裝 npm  install  pm2 -g   //  更新 - 儲存當前程序 pm2 save   //  更新 - 下載 npm  install  pm2 -g   //  更新 - 執行 pm2 update   //  啟動 pm2 start app.js   //  啟動 - 設定name pm2 start app.js --name  test   //  啟動 - cluster mode pm2 start app.js -i 2   //  停止 pm2 stop  test | id pm2 stop all   //  刪除 pm2 delete  test | id pm2 delete all   //  重啟 pm2 restart  test | id pm2 restart all   //  重新整理,平滑重啟,失敗後退化到restart pm2 reload  test | id pm2 reload all   //  檢視 - 程序列表 pm2 list pm2 l   //  檢視 - 某個程序 pm2 show  test | id pm2 info  test | id   //  版本 pm2 - v


【更多】

狀態管理:http://pm2.keymetrics.io/docs/usage/signals-clean-restart/

環境管理:http://pm2.keymetrics.io/docs/usage/environment/

日誌管理:http://pm2.keymetrics.io/docs/usage/log-management/

部署管理:http://pm2.keymetrics.io/docs/usage/deployment/

程序通訊:

http://pm2.keymetrics.io/docs/usage/process-metrics/

http://pm2.keymetrics.io/docs/usage/process-actions/

更多:http://pm2.keymetrics.io/docs/usage/quick-start/


http://uikoo9.com/更多精彩內容

求打賞(長按圖片即可識別)~
微信 捐助列表:http://uikoo9.com/donate/