提高 PM2 集群上的 NodeJS 性能 运行

Improve NodeJS performance running on PM2 clusters

我是 运行 使用 PM2 的集群 nodejs 产品 API,我对性能有顾虑。我已经通读了 PM2 文档,但我没有看到太多关于性能优化的内容。

PM2 或 Node 是否有默认限制?如果是这样,我该怎么做才能确保我的 API 发挥最大潜力 运行?

我的网络服务器有 4 个处理器、12 GB 内存,并且专为此 API 而存在。

PM2 脚本

module.exports = {
    apps: [{
        name: "myAppsName",
        script: "src/server.js",
        exec_mode: "cluster",
        instances: "max",
        autorestart: true,
        watch: false
      }]
};

您的表现可能不错。你没有说任何关于你的性能问题,所以这是一个一般性的答案。

您已经使用 instances: "max" 设置了 pm2 cluster mode 配置。这意味着 pm2 将计算出您机器上的处理器内核数量,并为您创建适当数量的集群 nodejs 进程。所以它很好地利用了你的四核机器。而且,如果您需要扩大规模,可以将其移至具有更多内核的机器上。

您没有描述您的 Web 服务,因此很难猜测集群中的每个进程需要多少 RAM。除非你的 nodejs 程序使用巨大的内存数据结构,否则你可能可以使用 nodejs 默认的堆大小。每个进程大约 1.5GiB,因此每个进程总共 2GiB 的物理 RAM 就足够了。您有 12GiB,您需要 8GiB。

在极不可能的情况下,您可以在每个 nodejs 进程中需要更多 RAM,您可以增加它。查找 --max_old_space_size 了解如何操作。

您可以使用 express.static() 提供的文件越多,您的网络应用程序的整体性能就越好。

如果您 reverse-proxy your nodejs cluster through nginx,您将把 https 的处理卸载到 nginx 进程,从而为您的网络服务器应用程序释放计算周期。

您可能在数据库服务器的某处遇到了性能瓶颈。随着 Web 应用程序的扩展,这是一个相当普遍的问题。你得想办法。

如果您的 nodejs 应用程序执行计算密集型工作,您应该调查使用 worker threads 来执行这些计算。在这种情况下,您应该将 instances: 减少到机器上内核数量的一半,以便为工作线程留出内核。