Nginx 达到 worker_connection 限制

Nginx 达到 worker_connection 限制

我正在管理一个 Nginx 服务器,它偶尔会断开一堆连接,检查日志后,我可以看到它worker_connections已经达到了限制,例如

2019/12/06 08:37:09 [alert] 14517#14517: 25000 worker_connections are not enough

从我的指标中我可以看到,尽管有 32 个(自动)工作程序,每个工作程序都应该能够处理 25000 个连接(如果我的理解正确的话),但 Nginx 在达到 20k 个活动连接后就开始丢弃连接。

我尝试过的事情:

  • 增加 worker_connection 限制
  • 打开multi_accept
  • 启用 epoll - 我可以看到大部分负载由 2-3 个工作进程处理,其他进程实际上未被使用,尽管这似乎并没有真正帮助解决问题,因为错误日志中显示的 PID 几乎总是同一个进程。

我真的不知道还能尝试什么,如果有人对可能导致此问题的原因有任何建议,我将不胜感激。

其他相关信息:

  • 32 个 CPU,64GB 内存
  • Ubuntu v18.04.3
  • 连接正在被上游代理
  • Nginx 平均约为 400 RPS

完整配置可以在这里找到: https://gist.github.com/mrcnkoba/0c4447c70e313a2ed1d7e94e1dad48a7

更新:我们开始使用reuseport,这似乎已经阻止了由于负载似乎很多更均匀地分布在工作进程中,而不是单个工作进程处理绝大多数负载。这似乎是解决问题的错误方法,因为考虑到服务器规格,nginx 应该能够处理更多连接,因此如果有人还有任何建议,我将不胜感激。

相关内容