我正在管理一个 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 应该能够处理更多连接,因此如果有人还有任何建议,我将不胜感激。