问题: 集群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
重新压测通过