node.js网站发布工具模块—pm2

2016-10-30    分类: nodejs笔记

网站发布一般都会借助,例如:IIS、apache

(跟pm2类似的还有forever,《node.js网站发布器—forever》)

在使用express框架为例,node.js中可以直接使用:

node ./bin/www

 

或者supervisor模块,推荐测试使用此模块

supervisor ./bin/www

以上的方法都可以发布网站,但是总会有意外发生或者网站超时会需要自动重启,或者充分利用服务器多核配置,这时就需要用到pm2。

网上就会有人问了:supervisor vs pm2 vs forever哪个更好

使用场合不完全一样。

  • supervisor 是开发环境用。
  • forever 管理多个站点,每个站访问量不大,不需要监控。
  • pm2 网站访问量比较大,需要完整的监控界面。

 

这里我们推荐使用pm2

一些常用方法:

npm install pm2 -g   //安装pm2
pm2 update           //更新pm2

pm2 start ./bin/www  //启动pm2
pm2 restart          //重启pm2
pm2 stop             //关闭pm2

pm2 list 或者 pm2 ls //查看所有进程
pm2 describe (App name/id)  //查看某个进程详细信息

pm2 delete all  //强制停止所有进程
pm2 delete 0    //强制停止某个进程
pm2 logs (App name/id)  //查看监听某个网站的动态日志信息
pm2 monit  //查看每个网站的CPU内存占用情况


监听模式类似supervisor,后台文件被修改立马能看出效果
pm2 start ./bin/www --watch   //开启监听
pm2 stop --watch (App name/id) //关闭监听,输入指定的id进程

 

 

------------------------------------------------------------------------------------

更多pm2使用方法

------------------------------------------------------------------------------------

pm2 是一个带有负载均衡功能的Node应用的进程管理器.
当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。它非常适合IaaS结构,但不要把它用于PaaS方案(随后将开发Paas的解决方案).

备注:SaaS、PaaS和IaaS是云服务模式。
 SaaS 软件即服务,例如Google的 Gmail 邮箱服务.面向应用型用户.
 PaaS 平台即服务.例如Google的GAE,面向开发型用户
 IaaS 基础架构即服务,例如亚马逊的AWS,IaaS对于不知道新推出的应用程序/网站会有多成功的创业公司来说非常有用
 请参考 云服务模式:SaaS、PaaS和IaaS,哪一种适合你?


主要特性:

内建负载均衡(使用Node cluster 集群模块)
后台运行
0秒停机重载,我理解大概意思是维护升级的时候不需要停机.
具有Ubuntu和CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

测试过Nodejs v0.11 v0.10 v0.8版本,兼容CoffeeScript,基于Linux 和MacOS.

安装
npm install -g pm2

用法
$ 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 start app.js -i max # 根据有效CPU数目启动最大进程数目
$ pm2 start app.js -i 3 # 启动3个进程
$ pm2 start app.js -x #用fork模式启动 app.js 而不是使用 cluster
$ pm2 start app.js -x -- -a 23 # 用fork模式启动 app.js 并且传递参数 (-a 23)
$ pm2 start app.js --name serverone # 启动一个进程并把它命名为 serverone
$ pm2 stop serverone # 停止 serverone 进程
$ pm2 start app.json # 启动进程, 在 app.json里设置选项
$ pm2 start app.js -i max -- -a 23 #在--之后给 app.js 传递参数
$ pm2 start app.js -i max -e err.log -o out.log # 启动 并 生成一个配置文件
pm2 start app.js --max_memory_restart 1024M : 当内存超过1024M时自动重启。 如果工程中有比较棘手的内
存泄露问题,这个算是一个折中方案。
你也可以执行用其他语言编写的app ( fork 模式):
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python

0秒停机重载:
这项功能允许你重新载入代码而不用失去请求连接。
注意:
仅能用于web应用
运行于Node 0.11.x版本
运行于 cluster 模式(默认模式)
$ pm2 reload all

CoffeeScript:
$ pm2 start my_app.coffee #这就是全部

PM2准备好为产品级服务了吗?
只需在你的服务器上测试
$ git clone https://github.com/Unitech/pm2.git
$ cd pm2
$ npm install # 或者 npm install --dev ,如果devDependencies 没有安装
$ npm test

 

 

官网:https://github.com/Unitech/pm2

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

中文翻译:https://www.douban.com/note/314200231/