线上 Nginx work_connections 连接数超了
问题现象
最近收到告警通知,部分接口出现 Nginx 500 错误。查看 Nginx 错误日志发现:
1 | 2025/04/17 10:40:20 [alert] 2403#2403: *5114106677 9216 worker_connections are not enough while connecting to upstream, client: 180.115.116.154, server: xx.xx.cn, request: "POST /report/launch HTTP/2.0", upstream: "http://172.18.20.232:9601/report/launch", host: "xx.xx.cn" |
原因分析
Nginx 核心参数说明
Nginx 的两个关键性能参数:
worker_processes:Nginx 工作进程数量
- 通常设置为 CPU 核心数
- 建议不超过 8 个,避免系统不稳定
worker_connections:每个工作进程的最大并发连接数
- 直接影响 Nginx 并发性能
- 受系统内核单进程最大文件描述符数量限制(
ulimit -n
)
重要概念
- ulimit -n:单个进程可打开的最大文件描述符数
- 最大并发连接数计算:
worker_processes × worker_connections
- 作为反向代理时的最大并发请求数:约为
worker_processes × worker_connections / 2
连接数不足原因
在反向代理模式下,每个 HTTP 请求占用两个连接:
- 客户端到 Nginx 的连接
- Nginx 到后端服务器的连接
当并发请求量超过配置的连接数上限时,就会出现本文所述错误。
解决方案
查看原有 nginx.conf 配置:
1 | worker_processes 4; |
将 worker_connections
从 9000 调整为 15000,问题得到解决。
注意:调整时应根据服务器硬件性能和实际业务负载评估,避免设置过大占用过多内存资源。
经验总结
- Nginx 连接池机制会在请求处理完成后释放连接,放入
free_connections
链表中供复用 - 合理配置
worker_processes
和worker_connections
对系统性能至关重要 - 调整参数时应循序渐进,不宜一次性做大幅调整
参考资料
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Xingcy!
评论