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"




pm2执行nest项目 pm2工程项目管理系统_vue


这种方法启动的项目没有监听自动重启的功能, 如果需要自动重启, 需执行以下启动命令

三. 启动koa2项目(带监听)

监听状态下, 项目遇到问题会自动重启, 比较适合生产环境

pm2 start ./bin/www --name="www" --watch


pm2执行nest项目 pm2工程项目管理系统_python_02


四. 停止某个项目

pm2 stop www
pm2 stop all #停止所有


pm2执行nest项目 pm2工程项目管理系统_java_03


五. 重启某个项目

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   //查询某个项目


pm2执行nest项目 pm2工程项目管理系统_linux_04


2. 显示所有进程日志

pm2 logs
pm2 logs www   //查询某个项目


pm2执行nest项目 pm2工程项目管理系统_java_05


3. 显示某个项目的详情

pm2 show www


pm2执行nest项目 pm2工程项目管理系统_pm2执行nest项目_06


九. 多进程

运行进程的不同方式:

$ 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

关于多进程, 请参考如下文章:

十. pm2 启动模式 fork 和 cluster 的区别

fork模式,单实例多进程,常用于多语言混编,比如php、python等,不支持端口复用,需要自己做应用的端口分配和负载均衡的子进程业务代码。
缺点就是单服务器实例容易由于异常会导致服务器实例崩溃。

cluster模式,多实例多进程,但是只支持node,端口可以复用,不需要额外的端口配置,0代码实现负载均衡。
优点就是由于多实例机制,可以保证服务器的容错性,就算出现异常也不会使多个服务器实例同时崩溃。

共同点,由于都是多进程,都需要消息机制或数据持久化来实现数据共享。