
Nginx 高并发下报错 connect() failed (110: Connection timed out) while connecting to upstream
1个回答
展开全部
背景
在对应用服务进行压力测试时,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内核参数优化:
参考资料:
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询