我听说过非常有趣的事情。
如果我们有 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
,那么即使只有 2 个 CPU 有 1 个工作进程,难道不是很好吗? 这样 2 * 1024 = 2048 个连接将比 1 * 1024 更好。是我错了还是发生了什么?
NGINX使用事件驱动模型。 来自 Web 服务的大多数活动,CPU 正在等待来自磁盘或网络的 IO。 Nginx在等待某些事情发生时不会阻止。
如果您尝试解决的问题How do I get 2048 connections with one CPU?
那么最好的配置将是。
worker_processes number auto;
worker_connections 2048;
自动将默认为 CPU 数,即 1。
nginx中的连接是轻量级的。 它们不会占用太多内存。
如果您有 2 个worker_processes和 1 个 CPU,那么内核将不得不在 2 个进程之间不断切换。 此上下文切换会增加一些不需要的开销。
这里有一篇很好的文章:https://www.nginx.com/blog/inside-nginx-how-we-designed-for-performance-scale/