Node.js CPU负载平衡

时间:2014-02-18 05:45:33

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

我用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忙,另外三个CPU闲置。当我在控制台中检查JMeter摘要时出现错误,大约是请求的5%。见截图。

CPU Utilisation

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

3 个答案:

答案 0 :(得分:4)

您是否使用cluster模块进行负载均衡和节点0.10.x?

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

节点0.10.x使用的是操作系统提供的平衡算法。在0.11.x算法was changed中,从现在开始它将更均匀地分布。

答案 1 :(得分:2)

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

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

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

$ pm2 start app.js -i 4

理论上这应该有效,除非Ghost依赖于某些全局变量(每个进程都无法共享)。

答案 2 :(得分:1)

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