【问题标题】:Node.js CPU load balancingNode.js CPU 负载均衡
【发布时间】:2014-08-14 22:30:09
【问题描述】:

我用 JMeter 创建了测试来测试 Ghost 博客平台的性能。 Ghost 用 Node.js 编写并安装在具有 1Gb RAM、1 个 CPU 的云服务器中。

我注意到在 400 个并发用户之后 JMeter 出现错误。直到 400 个并发用户负载是正常的。我决定增加 CPU 并添加 1 个 CPU。

但错误重现并添加了 2 个 CPU,总共 4 个 CPU。 400 个并发用户后出现此问题。

我不明白为什么 1 个 CPU 可以处理 400 个用户,而 4 个 CPU 的结果相同。

在监控过程中,我注意到只有一个 CPU 处于忙碌状态,而其他 3 个 CPU 处于空闲状态。当我在控制台中检查 JMeter 摘要时出现错误,大约占请求的 5%。见截图。

我想知道是否可以在 CPU 之间平衡负载?

【问题讨论】:

  • 您可能还想使用ulimit -n 检查您的打开文件限制。这限制了节点可以处理的并发请求数。您可以使用ulimit -n 10000 增加它(用于本地会话)。要创建 Ghost 服务器进程的集群,您可以尝试 pm2。只需使用 npm install pm2 -gpm2 start <your_server>.js 安装 pm2
  • 问题部分解决了。以下是我得到的步骤和结果: 1. 将 ulimit 更改为 10000。结果:没有变化。 2.启用节点集群模块。结果:+200 个并发用户 3. 调整 Nginx 工作进程。结果:+2k 并发用户我可以假设问题出在 Nginx 上。当我测试没有集群模块的服务器时,服务器处理了 2000 个用户。当我达到限制时,我会尝试启用集群模块。

标签: performance node.js jmeter cpu cpu-usage


【解决方案1】:

您是否使用cluster 模块进行负载平衡和Node 0.10.x?

如果是这样,请将您的 node.js 更新为 0.11.x。

节点 0.10.x 正在使用操作系统提供的平衡算法。 0.11.x 中算法was changed,所以以后会更均匀分布。

【讨论】:

    【解决方案2】:

    Node.js 以单线程着称(请参阅 this answer):单个节点进程将只使用一个内核(请参阅 this answer 以获得更深入的了解),这就是为什么您会看到您的程序完全使用一个核心,并且所有其他核心都处于空闲状态。

    通常的解决方案是使用 Node 的 cluster core module,它允许您创建共享相同服务器端口的子进程,从而帮助您启动 Node 进程集群来处理负载。

    但是,如果不修复 Ghost 的代码,您将无法真正使用它。一个选项是使用pm2,它可以为您使用集群模块来包装节点程序。例如,有四个核心:

    $ pm2 start app.js -i 4
    

    理论上这应该可行,除非 Ghost 依赖于一些全局变量(不能由每个进程共享)。

    【讨论】:

    【解决方案3】:

    使用集群核心和负载平衡 nginx。那是关于 node.js 的坏部分。很棒的框架,但开发人员必须进入负载平衡混乱。而 java 和其他运行时使得是无缝的。无论如何,没有什么是完美的。

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2013-05-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-30
      • 2016-11-29
      • 2013-02-05
      相关资源
      最近更新 更多