教程 > pm2 教程 > pm2 基础 阅读:14

pm2 集群模式 Cluster Mode

集群模式允许联网的 Node.js 应用程序(http(s)/tcp/udp 服务器)在所有可用的 CPU 上进行扩展,无需任何代码修改。这将大大提高应用程序的性能和可靠性,具体取决于可用 CPU 的数量。 在幕后,它使用 Node.js 集群模块,以便扩展应用程序的子进程可以自动共享服务器端口。


集群使用

要启用集群模式,只需传递 -i 选项:

$ pm2 start server.js -i max

max 表示 PM2 将自动检测可用 CPU 的数量并运行尽可能多的进程

或者通过 js/yaml/json 文件

module.exports = {
  apps : [{
    script    : "server.js",
    instances : "max",
    exec_mode : "cluster"
  }]
}

注意:需要将 exec_mode 设置为 cluster 以便 PM2 知道要在每个实例之间进行负载平衡,默认情况下不会

然后启动进程文件:

$ pm2 start processes.json

-i 或实例选项可以是:

  • 0/max - 将应用程序分布到所有 CPU
  • -1 - 将应用程序分布到所有 CPU - 1
  • number - 将应用程序分布在多个 CPU 上

Reload

restart(杀死并重新启动进程)相反,reload 实现了 0 秒的停机时间重新加载。

$ pm2 reload <app_name>

或者

$ pm2 reload process.json
$ pm2 reload process.json --only server

如果重新加载系统没有设法重新加载我们的应用程序,超时将回退到经典重启。


正常关机

在生产环境中,在退出应用程序之前,可能需要等待剩余的查询被处理或关闭所有连接。 在 PM2 重新加载上下文中,它可以转换为非常长的重新加载或不起作用的重新加载(回退到重新启动),这意味着你的应用程序在退出时仍有打开的连接。 可能还需要关闭所有数据库连接、清除数据队列或其他任何内容。

要正常关闭应用程序,可以捕获 SIGINT 信号(PM2 退出时发送的第一个信号)并执行操作以等待/清除所有这些状态:

process.on('SIGINT', function() {
   db.stop(function(err) {
     process.exit(err ? 1 : 0);
   });
});

查看笔记