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 回复

(必填)

(必填)

(可选)