网站发布一般都会借助,例如: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) //查看监听某个网站的动态日志信息,类似supervisor用来测试 pm2 monit //查看每个网站的CPU和内存占用情况 监听模式类似supervisor,后台文件被修改立马能看出效果 pm2 start ./bin/www --watch //开启监听,一旦有文件修改立马生效,不加--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
配置文件:
如果应用程序很多,一个个手动启动会很麻烦,把所有应用都写在一个文件一件启动所有应用会很快。
1,创建配置文件ecosystem.config.js
pm2 init
2,目前一个应用实例
module.exports = { apps : [{ name: 'xinyongka', script: 'www', cwd: '/root/koa2/bin', max_memory_restart: '500M',// 超过多大内存自动重启,仅防止内存泄露,根据自己的业务设置 exec_mode: 'cluster', // 开启多线程模式,用于负载均衡 instances: 'max', // 启用多少个实例,可用于负载均衡 autorestart: true // 程序崩溃后自动重启 }, { //第二个应用实例 } ] };
3,启动
pm2 start /path/to/ecosystem.config.js
配置文件参考文章
http://hk.javashuo.com/article/p-aunagdgo-gt.html
https://blog.csdn.net/z591102/article/details/124005345
官网:https://github.com/Unitech/pm2
http://pm2.keymetrics.io/docs/usage/process-management/
中文翻译:https://www.douban.com/note/314200231/