nginx worker 进程最好为单个 CPU 提供 1 个或多个进程



我听说过非常有趣的事情。

如果我们有 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/

最新更新