worker_connections 不够,有空闲的 worker

worker_connections 不够,有空闲的 worker

我尝试增加我的服务器可以处理的并发连接数。

$uname -a
Linux debian 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2 (2016-10-19) x86_64 GNU/Linux

$ulimit -Sn
65536

$ulimit -Hn
65536

Nginx 配置有下几行:

worker_processes  4; # or 8
worker_rlimit_nofile 60000;

events {
    worker_connections  1024;
}

另外还有一个通过上游使用的休眠(无限期休眠)python asyncio HTTP 后端。

经过几秒钟的负载测试后:

2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough
2016/11/03 05:13:44 [alert] 15#15: 1024 worker_connections are not enough

尽管

$netstat -anvpt | wc -l  
1156   # or twice bigger if there is 8 worker processes.

htop显示有 4 个(或 8 个)nginx 工作进程,并且仅使用了 1 个 CPU 核心的 50%(而其他 3 个核心处于空闲状态)。对输出进行更详细的调查netstat显示,仅使用了 2 个工作进程,并且它们都占用了不超过 1024 个允许连接数的一半(从客户端到 nginx 以及从 nginx 到上游)。

此外,nginx 和后端在docker容器内工作。

更新:如果我增加到worker_connections10240,我将处理更多客户端,并且 CPU 性能将成为瓶颈。但问题是为什么我1024 worker_connections are not enough在仍有 2 或 6 个空闲工作者时会遇到该消息。

答案1

虽然来晚了,但对于 Google 员工来说,请尝试增加工作进程限制(或使用自动):

worker_processes auto;

根据Nginx 文档,它们直接相互影响:

需要注意的是,这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是,实际同时连接数不能超过当前打开文件的最大数量的限制,该限制可以通过 worker_rlimit_nofile 进行更改。

相关内容