Node應用的進程管理器之PM2打賞

一直以來,沒有機會在商業項目、網站上正式用起來NodeJS,說起來挺遺憾的,最近公司網站重構,同時為了配合做些SEO優化,經過一系列篩選后選擇了使用NodeJS來支撐前端展現。

在剛接觸NodeJS時,也像很多人一樣,想問有沒有針對NodeJS的熱部署方案,后面發現windows下使用nodemon挺好用,但只是簡單的自動重載,似乎放到網站上有些不夠用,看到翻譯后的express官網有介紹進程管理器StrongLoop Process Manager、PM2和Forever,StrongLoop Process Manager是IBM一家子公司維護的,不過國內沒見太多人用,大部分都是選擇Forever或者PM2(似乎現在PM2使用率更高),對比后選擇了PM2。

PM2 是一個帶有負載均衡功能的 Node 應用的進程管理器。使用它,可以充分利用CPU多核優勢,讓你的NodeJS程序完全應用服務器CPU,并且可以保證進程"永遠在線",同時,可以實現0秒重載等。

PM2主要特性如下:

1、內建負載均衡(使用 Node cluster 集群模塊)
2、后臺運行
3、0 秒停機重載,因為帶了有負載均衡功能,可以使用pm2 gracefulReload app來實現平滑重載
4、具有 Ubuntu 、CentOS等啟動腳本,可以簡單實現開機自動啟動
5、停止不穩定的進程(避免無限循環)
6、控制臺檢測
7、提供 HTTP API
8、遠程控制和實時的接口 API ( Nodejs 模塊,允許和 PM2 進程管理器交互 )

安裝:

npm install pm2 -g

使用:

$ npm install pm2 -g # 命令行安裝 pm2
$ pm2 start app.js -i 4 # 后臺運行pm2,啟動4個app.js ,也可以把'max' 參數傳遞給 start,正確的進程數目依賴于Cpu的核心數目
$ pm2 start app.js --name my-api # 命名進程
$ pm2 list # 顯示所有進程狀態
$ pm2 monit # 監視所有進程
$ pm2 logs # 顯示所有進程日志
$ pm2 stop all # 停止所有進程
$ pm2 restart all # 重啟所有進程
$ pm2 reload all # 0 秒停機重載進程 (用于 NETWORKED 進程)
$ pm2 stop 0 # 停止指定的進程
$ pm2 restart 0 # 重啟指定的進程
$ pm2 startup # 產生 init 腳本 保持進程活著
$ pm2 web # 運行健壯的 computer API endpoint (http://localhost:9615)
$ pm2 delete 0 # 殺死指定的進程
$ pm2 delete all # 殺死全部進程

此外,pm2提供了很多可選參數用于配置你的服務啟動模式等,為了方便使用,pm2還提供了json或者yml形式的配置文件啟動。

使用方式如

pm2 start run.json

比如我的項目,建立配置如下

{

"apps": [

{

"name": "test",

"script": "bin/www",

"env": {

"DEBUG": "server:*",

"NODE_ENV": "development",

"NODE_MODE": "debug",

"PORT": 3000

},

"watch": [

"protected"

],

"kill_timeout": 3000,

"max_memory_restart": "70M",

"instances": "2",

"exec_mode": "cluster"

},

{

"name": "beta",

"script": "bin/www",

"env": {

"DEBUG": "server:*",

"NODE_ENV": "beta",

"NODE_MODE": "build",

"PORT": 3001

},

"watch": [

"protected"

],

"kill_timeout": 3000,

"max_memory_restart": "70M",

"instances": "2",

"exec_mode": "cluster"

},

{

"name": "prod",

"script": "bin/www",

"env": {

"NODE_ENV": "production",

"NODE_MODE": "build",

"PORT": 3002

},

"watch": [

"protected"

],

"kill_timeout": 3000,

"max_memory_restart": "150M",

"instances": "max",

"exec_mode": "cluster"

}

]

}

在各大網站翻譯的文章中,基本都是從官網拷貝了配置文件加以注解,和上面配置文件一樣,默認有多個app,其實這里面配置數組假如一個弊端,就是如果想通過不指定任何參數來運行,就必須同時啟動所有app,這自然是不完美的,當然,像我這樣配置了三個,啟動的時候可以選擇追加參數—only指定啟動某個app,或者直接寫shell指定參數,但這樣以來,倒不如分開寫多個json文件,比如以上配置分割為test.json、beta.json和prod.json。

參考資料

PM2 Github地址:https://github.com/Unitech/pm2

PM2 官網:http://pm2.io/

這里僅分享下個人見解,如有出入,歡迎拍磚。

Node應用的進程管理器之PM2
文章《Node應用的進程管理器之PM2》二維碼
  • 微信打賞
  • 支付寶打賞

已有11條評論

  1. 樂賺168賺錢博客

    支持博主

    2016-09-17 10:43 回復
  2. 夜盡迗明

    不錯

    2016-09-01 11:54 回復
  3. 飛利浦呼吸機

    很好,學習了

    2016-08-17 11:03 回復
  4. 從零開始學運營

    運營人-從零開始學運營

    2016-08-13 16:34 回復
  5. 網絡營銷

    好吧,頂~

    2016-08-05 19:01 回復
  6. 放線滑車廠家

    感謝分享學習了

    2016-08-04 15:10 回復
  7. 奇虎分享網

    很不錯 收藏了

    2016-08-04 10:32 回復
  8. qq昵稱大全

    外行人看到這類文章,總是覺得很高深。

    2016-08-03 19:24 回復
  9. 優品家具

    學習了

    2016-08-01 11:28 回復
  10. 起重機安全監控系統

    寫的很全,贊一個

    2016-07-31 21:55 回復

(必填)

(必填)

(可選)

黑龙江22选5开奖