pm2

cluster 模式不能使用 node inspect 参数,fork 模式才行
docker 中使用 pm2-runtime 禁用 daemon 模式

主要特性:
内建负载均衡(使用Node cluster 集群模块 // 均衡算法不一样啊)
0 秒停机重载.
具有 Ubuntu 和 CentOS 的启动脚本
停止不稳定的进程(避免无限循环)
控制台检测
提供 HTTP API
远程控制和实时的接口API ( Nodejs 模块,允许和PM2进程管理器交互 )

pm2 会启动多个进程, 进程间的内存数据彼此独立,所以微信 accessToken 这类唯一性的东西必须存在文件/数据库/共享内存

PM2 模块是 cluster 模块的一个包装层。它的作用是尽量将 cluster 模块抽象掉,让用户像使用单进程一样,部署多实例 Node 应用。

$ pm2 start app.js -i 4
i 参数告诉 PM2,这段代码应该在 cluster_mode 启动,且新建 worker 进程的数量是4个。如果 i参数的值是 0,那么当前机器有几个 CPU 内,PM2就会启动几个 worker 进程。

如果一个 worker 进程由于某种原因挂掉了,会立刻重启该 worker 进程。

# 重启所有worker进程
$ pm2 reload all

#查看 worker 详情
$ pm2 show


正确情况下,PM2 采用 fork 模式新建 worker 进程,即主进程 fork 自身,产生一个 worker 进程。pm2 reload 命令则会用 spawn 方式启动,即一个接一个启动 worker 进程,一个新的 worker 启动成功(事件监听),再杀死一个旧的 worker 进程。采用这种方式,重新部署新版本时,服务器就不会中断服务。

$ pm2 reload <脚本文件名>
关闭worker进程的时候,可以部署下面的代码,让worker进程监听shutdown消息。一旦收到这个消息,进行完毕收尾清理工作再关闭。
process.on('message', function(msg) {
if (msg === 'shutdown') {
close_all_connections();
delete_logs();
server.close();
process.exit(0);
}
});

更新:
$ npm install pm2@latest -g
$ pm2 update //更新内存中的 pm2