我尝试增加我的服务器可以处理的并发连接数。
$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_connections
10240,我将处理更多客户端,并且 CPU 性能将成为瓶颈。但问题是为什么我1024 worker_connections are not enough
在仍有 2 或 6 个空闲工作者时会遇到该消息。
答案1
虽然来晚了,但对于 Google 员工来说,请尝试增加工作进程限制(或使用自动):
worker_processes auto;
根据Nginx 文档,它们直接相互影响:
需要注意的是,这个数字包括所有连接(例如与代理服务器的连接等),而不仅仅是与客户端的连接。另一个考虑因素是,实际同时连接数不能超过当前打开文件的最大数量的限制,该限制可以通过 worker_rlimit_nofile 进行更改。