nginx优化配置进程数与cpu亲和性之间的关系,你真正了解吗???

发布时间 2023-06-10 16:48:38作者: 萧痕痕痕痕

关于nginx的进程数的配置,以及cpu亲和性的配置,大家能了解多少呢?

 worker_processes:配置线程数

在高并发的web服务器场景下,并发实际是有进程处理,那么为了保障处理并发,线程数肯定要事先启动足。打个比方就像是开餐厅,开业之前需要招聘相对数量的服务员来接待客户。

而worker_processes配置的线程数官方建议是跟你自身cpu核心数相同,当然这只是建议,如果你的cpu足够强大,1个核心可以承载2个线程,自然也可以设置为cpu核心数的2倍。

简而言之就是确保并发能够及时处理,所以要配置线程数。当然大多数情况下因为项目在刚上线的时候是无法预估准确的并发量的,所以针对这个情况,官服的建议是设置为等于cpu核心数,当然后续是可以修改的。

worker_cpu_affinity cpu亲和性

那么说到这,什么是cpu亲和性呢? 对于这条优化各位又是怎么理解的。

首先这条配置要跟worker进程数放到一起去理解,他的作用是将不同的进程绑定到不同的cpu核心上。

在默认的情况下,nginx的多个线程是有可能运行在某一个cpu核心上的,这样的话就会导致硬件资源不均,导致cpu负载异常。那么这条优化其实就是将nginx不同的进程分配到不同的cpu核心上处理,达到重复利用cpu多个核心的效果

下面附上一张配置图。

2核服务器:

分析上方配置的意思

worker_processes 6;

nginx启动6个线程去接受并发。

当然启动几个线程也并不是你自己定的,还需根据压测(apache bench)结果经行调整,我可以设置4个也可以2个 也可以6个!!!

worker_cpu_affinity 01 01 01 10 10 10;

将上方6线程前三个分配到01核上,后3个分配到02核上。

当然我也尝试将其设置为worker_cpu_affinity 01 10; 我的猜想是我如果这样设置,会不会按照轮询的方式,把进程数均匀分配到这2个线程上,但试试告诉我不可以:

 

因此worker_processes要与worker_cpu_affinity 结合到一起去理解!!