nginx worker进程最好为单个cpu拥有1个或多个进程?

时间:2019-04-10 19:51:57

标签: linux nginx

我听到了很有趣的事情。

  

如果我们有1个cpu并产生2个工作进程,则意味着每个   辅助进程使用该1 cpu的50%资源。如果我们产生了1   工作进程,来自CPU的资源将用于该工作进程   100%。因此,仅对于1个cpu,最好只有1个单工   过程。

然后他继续:

  

worker_connections是每个工作进程可以连接多少个   接受。我有1024。

然后他再次继续:

  

因此,worker_processes * worker_connections =最大连接数。

那么问题:如果是worker_processes * worker_connections = max connections,那么即使仅使用1个cpu就有2个工作进程仍然不是一件好事吗?这样2 * 1024 = 2048个连接会比1 * 1024好。我错了吗?或者会发生什么?

1 个答案:

答案 0 :(得分:0)

NGINX使用事件驱动模型。大多数活动来自网络服务,CPU正在等待从磁盘或网络的IO。 Nginx在等待某些事情发生时不会阻塞。

如果您要解决的问题是How do I get 2048 connections with one CPU?,那么您的最佳配置就是。

worker_processes number  auto;  
worker_connections 2048;

自动将默认为1个CPU。

在nginx中,连接是轻量级的。他们不占用太多内存。

如果您有2个worker_processes和1个CPU,则内核将必须在2个进程之间保持切换。这种上下文切换会增加一些不必要的开销。

这里写得很好: https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/