PM2是具有内置负载平衡器的Node.js应用程序的生产进程管理器。它可以使应用程序永远保持活动状态,可以在不停机的情况下重新加载它们,并简化常见的系统管理任务。当你要把你的独立代码利用全部的服务器上的所有CPU,并保证进程永远都活着,0秒的重载, PM2是完美的。
PM2官方网站:https://pm2.keymetrics.io/
PM2的NPM地址: https://www.npmjs.com/package/pm2
PM2的github地址: https://github.com/Unitech/pm2
一. 安装pm2
npm install pm2 -g
二. 启动koa2项目
pm2 start ./bin/www --name="www"
这种方法启动的项目没有监听自动重启的功能, 如果需要自动重启, 需执行以下启动命令
三. 启动koa2项目(带监听)
监听状态下, 项目遇到问题会自动重启, 比较适合生产环境
pm2 start ./bin/www --name="www" --watch
四. 停止某个项目
pm2 stop www
pm2 stop all #停止所有
五. 重启某个项目
pm2 restart www
pm2 restart www --watch
pm2 restart all
pm2 restart all --watch
pm2 reload all #0秒停机重载进程 (用于 NETWORKED 进程)
六. 删除某个项目
pm2 delete app
pm2 delete all #删除所有
七. 当前项目清单
pm2 list
八. 其他pm2命令
1. 监视所有进程
pm2 monit
pm2 monit www //查询某个项目
2. 显示所有进程日志
pm2 logs
pm2 logs www //查询某个项目
3. 显示某个项目的详情
pm2 show www
九. 多进程
运行进程的不同方式:
$ 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 # 启动 并 生成一个配置文件
你也可以执行用其他语言编写的app ( fork 模式):
$ pm2 start my-bash-script.sh -x --interpreter bash
$ pm2 start my-python-script.py -x --interpreter python
关于多进程, 请参考如下文章:https://www.cnblogs.com/xingchong/p/13183162.html
十. pm2 启动模式 fork 和 cluster 的区别
fork模式,单实例多进程,常用于多语言混编,比如php、python等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。
缺点就是单服务器实例容易由于异常会导致服务器实例崩溃。
cluster模式,多实例多进程,但是只支持node,端口可以复用,不需要额外的端口配置,0代码实现负载均衡。
优点就是由于多实例机制,可以保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。
共同点,由于都是多进程,都需要消息机制或数据持久化来实现数据共享。