【问题标题】:Improve NodeJS performance running on PM2 clusters提高在 PM2 集群上运行的 NodeJS 性能
【发布时间】:2021-11-05 08:21:24
【问题描述】:

我正在使用 PM2 运行集群 nodejs 生产 API,但我担心性能。我已通读 PM2 文档,但对性能优化了解不多。

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

我的网络服务器有 4 个处理器、12 GB 的 RAM,并且仅用于此 API。

PM2 脚本

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

【问题讨论】:

    标签: node.js performance express pm2


    【解决方案1】:

    你可能在表现方面处于良好状态。你没有说任何关于你的性能问题,所以这里是一个一般的答案。

    您已使用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 服务器应用程序腾出计算周期。

    您可能在数据库服务器的某个地方遇到了性能瓶颈。随着 Web 应用程序的扩展,这是一个相当普遍的问题。你必须弄清楚这一点。

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

    【讨论】:

    • 谢谢,这正是我正在寻找的信息类型。我对默认堆大小很好奇,但 1.5gb 应该足够了。
    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 2021-02-24
    • 2015-03-20
    • 2010-10-09
    • 1970-01-01
    • 2018-04-02
    • 1970-01-01
    相关资源
    最近更新 更多