我听到了很有趣的事情。
如果我们有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好。我错了吗?或者会发生什么?
答案 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/