Node.js CPU负载平衡

我使用JMeter创build了testing来testingGhost博客平台的性能。 用Node.js编写的Ghost,安装在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利用率

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

你使用cluster模块来负载均衡和节点0.10.x?

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

节点0.10.x使用操作系统提供的平衡algorithm。 在0.11.x中,algorithm发生了变化 ,所以从现在起它将更均匀地分布。

Node.js是着名的单线程(见这个答案 ):一个节点进程将只使用一个核心(更深入的了解这个答案 ),这就是为什么你看到你的程序完全使用一个核心,所有其他内核都空闲。

通常的解决scheme是使用Node的cluster核心模块 ,通过允许您创build共享相同服务器端口的subprocess来帮助您启动一个Node进程集群来处理负载。

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

 $ pm2 start app.js -i 4 

理论上这应该工作,除非Ghost依靠一些全局variables(不能被每个进程共享)。

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