Nginx 高并发下报错 connect() failed (110: Connection timed out) while connecting to upstream

 我来答
华源网络
2022-06-25 · TA获得超过5652个赞
知道小有建树答主
回答量:2486
采纳率:100%
帮助的人:156万
展开全部

背景
在对应用服务进行压力测试时,Nginx在持续压测请求1min左右后开始报错,花了一些时间对报错的原因进行排查,并最终定位到问题,现将过程总结下。

压测工具
这里压测使用的是 siege , 其非常容易指定并发访问数以及并发时间,以及有非常清晰的结果反馈,成功访问数,失败数,吞吐率等性能结果。

压测指标
单接口压测,并发100,持续1min。

压测工具 报错

Nginx error.log 报错

排查问题

发现在TCP的连接有两个异常点

关于这两点开始进行分析:

TIME-WAIT 定义中分析得知,当压测工具关闭连接后,实际上Nginx所在机器连接并未立刻CLOSED,而是进入TIME-WAIT状态,网上可以搜到非常多讲解TIME-WAIT过多导致丢包的情况,与我在压测时所遇到情况一样。

net.ipv4.tcp_max_tw_buckets = 5000 5000表示系统同时保持TIME_WAIT套接字的最大数量,如果超过这个数字,TIME_WAIT套接字将立刻被清除并打印警告信息。

优化方案
参照在网上搜索获取的信息,调整Linux内核参数优化:

参考资料:

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式