Nginx并发场景下接口大量502问题

文章讨论了在200并发场景下Nginx接口返回502的问题,通过分析发现是由于TCP端口不足导致。解决方案包括修改Nginx配置、调整sysctl参数以减少TIME_WAIT状态和加速端口回收,最终成功提高并发处理能力。
摘要由CSDN通过智能技术生成

问题: 集群200并发场景下时间长会出现接口返回502的情况

定位过程:

1.查看/usr/local/nginx/logs/error.log 发现大量报错日志如下

该报错表示Nginx认为上游服务接口都不可用,直接拒绝了所有API请求,

查看ngin官方文档

所以修改nginx的配置如下,将max_fails置为0,表示不统计该值,服务一直可用

然后再次压测

发现报错出现变化 ,开始出现如下报错

出现报错:99: Cannot assign requested address

表示nginx无法分配请求的地址,那么可以看出,是nginx的tcp端口连接数占满,所以导致无法分配请求

压测查看tcp端口占用

netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a,S[a]}'

发现当TIME_WAIT到达53486时jmeter的压测开始报错,可以断定是nginx服务器tcp端口不够用了

所以修改如下:

vim /etc/sysctl.conf

增加如下参数

#低端口释放后的等待时间,默认为60s,修改为15~30s

net.ipv4.tcp_fin_timeout=30

#修改tcp/ip协议配置, 通过配置/proc/sys/net/ipv4/tcp_tw_resue, 默认为0,修改为1,释放TIME_WAIT端口给新连接使用

net.ipv4.tcp_timestamps=1

#修改tcp/ip协议配置,快速回收socket资源,默认为0,修改为1

net.ipv4.tcp_tw_recycle=1

#修改链接重利用

net.ipv4.tcp_tw_reuse=1

执行sysctl -p 使修改生效

最后使用 修改最大端口范围

echo "10240 65535" > /proc/sys/net/ipv4/ip_local_port_range

重新压测通过

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值