Nginx CPU亲和性

Nginx CPU亲和性

Nginx 默认没有开启利用多核 cpu,我们可以通过 worker_processes 指令来启动多个 worker,但是 worker 最终运行在哪些 cpu 核上是系统层进行调度的。

我们可以通过增加 worker_cpu_affinity 指令来对 worker 所运行的 cpu 核做绑定,以此充分利用 cpu 多核 cpu 的性能。cpu 是任务处理、计算最关键的资源,cpu 核越多,性能就越好;通过将 nginx worker 绑定到特定的 CPU 上可以避免因为 worker 被频繁调度带来的 CPU 的 cache miss 和某些 cpu 核负载不均的问题。

Nginx CPU亲和性配置

Nginx CPU 亲和性配置有两种方式,即手动绑定方式与自动绑定方式。

手动绑定

需要手动写要绑定到 CPU 核的配置,cpu 有多少个核,就有几位数,1 代表内核开启,0 代表内核关闭,比如,启动 4 个 worker,分别绑定到 CPU0 ~ CPU3 上:

worker_processes 4; worker_cpu_affinity 0001 0010 0100 1000;

或者,启动 2 个 worker;worker 1 绑定到 CPU0/CPU2 上;worker 2 绑定到 CPU1/CPU3 上:

worker_processes 2; worker_cpu_affinity 0101 1010;

自动绑定(建议方式)

自适应的方式来启动一定数量的 worker,并且自动绑定到对应的 cpu 核心上,这里启动的 worker 数量和 cpu 核心数相同:

worker_processes auto; worker_cpu_affinity auto;

也可以通过下面的配置方式来限制 CPU 资源的使用,只将 nginx worker 绑定到特定的一些 cpu 核心上:

worker_cpu_affinity auto 01010101;

Nginx CPU亲和性总结

Nginx 默认没有开启利用多核 cpu,我们可以通过 worker_processes 指令来启动多个 worker,但是 worker 最终运行在哪些 cpu 核上是系统层进行调度的。

我们可以通过增加 worker_cpu_affinity 指令来对 worker 所运行的 cpu 核做绑定,以此充分利用 cpu 多核 cpu 的性能。