PM2 在运行时更改集群进程大小

PM2 change cluster processes size at runtime

本文关键字:进程 运行时 PM2      更新时间:2023-09-26

>有谁知道是否可以在 NodeJS PM2 中更改运行时应用程序的集群进程数?

问候菲利普

您可以使用

pm2 scale在运行时垂直扩展进程数,请注意,它仅适用于集群模式。例:

  • pm2 scale APPNAME 2会将进程扩展到正好 2 个实例。
  • pm2 scale APPNAME +2将添加两个进程。
  • pm2 scale APPNAME -1将删除一个进程。

源链接

JSON 格式指定 PM2 设置:

{
 "apps": [{
    "name": "server",
    "script" : "index.js",
    "instances": 2,
    "exec_mode: "cluster",
    "cwd": "/path/to/script"
 }]
}

启动服务器:

pm2 start application.json

假设您要再添加 2 个实例,只需再次运行相同的命令:

pm2 start application.json

检查进程列表:

pm2 list

要测试所有 4 个实例是否在集群模式下运行,请执行以下操作:

pm2 restart server

它将重新启动 4 个进程中的每一个。

在运行时(应用程序启动后(,有两种方法可以"扩展"应用程序:

1( 使用命令行(此处记录在"实时扩展集群"下(,如下所示:

pm2 scale <app name> <n>

请注意,这可以是群集将纵向扩展或缩减到的一致数字。它也可以是添加的,例如 pm2 缩放应用 +3,在这种情况下,将向群集添加 3 个辅助角色。

2( 使用程序化 API(文档在这里,但没有记录规模(。由于没有记录,因此您可以通过以下方式进行操作:

pm2.scale(<APPNAME>, <SCALE_TO>, errback)

请注意,这是将放大或缩小到的数字,而不是添加或删除的数字。下面是连接到并扩展到 4 个实例的完整示例:

var pm2 = require('pm2');
pm2.connect(function (err) {
    pm2.scale('appname', 4, function(err, procs) {
        console.log('SCALE err: ', err);
        console.log('SCALE procs: ', procs);
    });
});

我们遇到了同样的问题,但没有找到任何解决方案。为了解决这个问题,我为PM2编写了一个小插件,它可以帮助根据利用率需求动态扩展应用程序。您可以尝试使用它 https://www.npmjs.com/package/pm2-autoscale

或者直接安装它

pm2 install pm2-autoscale

当模块检测到 CPU 利用率高于预期时,它将开始将实例增加到最大 CPUs-1,并且服务器是否有可用内存。

当模块检测到 CPU 利用率正在下降时,它将停止无用的实例。