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

29 阅读1分钟

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]}'

7f1fafaaeed4eef2923a1f8bf4dc3fc.png 发现当TIME_WAIT到达56730时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

重新压测通过