17

你如何启动一个节点进程,以特定的 CPU 内核为目标?

我见过节点集群,但我有兴趣在不同的核心上启动两个不同的进程。

我假设从命令行启动节点时有一种方法可以做到这一点,即:

节点 myapp.js

如果有区别,我很想知道如何在 Windows 和 linux 中执行此操作。

4

2 回答 2

15

一般来说,调度程序会在没有任何帮助的情况下完成这项工作。在野外,我只见过一种情况很重要......

我们在一个 8 核的机器上部署了一个节点服务,在负载测试期间,我们做了一个最奇怪的观察……该服务实际上在 7 个工作人员的情况下比在 8 个工作人员的情况下表现更好。稍后进行一些调试,我们发现所有的网络中断都是由核心 0 处理。我使用了 15 个工作人员,因此与其他核心相比,核心 0 将分担 1/2 的负载。最终,我认为我们最终选择了 7 名工人,因为它更简单、更可预测,而且复杂性不值得获得约 7% 的理论吞吐量。

话虽如此,要在 linux 上设置 CPU 亲和性:

$ taskset -pc 3089
pid 3089's current affinity list: 0,1

$ taskset -p 3089
pid 3089's current affinity mask: 3 # core 0 = 0x1, core 1 = 0x2


$ taskset -pc 1,2,3 3089 
pid 3089's current affinity list: 0,1
pid 3089's new affinity list: 1
于 2012-09-21T00:41:03.430 回答
5

在 linux 上,您可以使用taskset给定的 CPU 亲和性来运行节点。有关在 Windows 中使用该命令执行相同操作的信息,请参阅这篇文章。start

于 2012-09-14T22:09:16.540 回答