减少随机端口占用的几种方式

本文阅读量 Posted by Kird on 2019-08-16
据博客之前写的几篇文章,可以了解到TimeWait和随机端口的相关知识,总结下优化随机端口占用的几种方法。戳进来-->

根据博客之前写的几篇文章,可以了解到TimeWait和随机端口的相关知识,总结下优化随机端口占用的几种方法。

四种方法

net.ipv4.ip_local_port_range

方法一,增加随机端口范围。

1
sysctl -w net.ipv4.ip_local_port_range=1024	65535

keepalive

方法二,如有需要,增加keepalive配置

1
2
3
4
5
6
7
8
location / {
proxy_http_version 1.1;
proxy_set_header Connection "";
}
upstream __ {
keepalive 2000;
server 1.1.1.1:8001;
}

net.ipv4.tcp_max_tw_buckets

这个参数,在需要消耗随机端口的场景中,可以是个安全值。当TW数超过这个值时,系统会主动回收掉这个链接,释放端口。但是如果TW到这个数后,系统会有报错信息,类似:

1
2
3
kernel: [5205501.103660] TCP: time wait bucket table overflow
kernel: [5205501.103660] TCP: time wait bucket table overflow
kernel: [5205501.103660] TCP: time wait bucket table overflow

这个值建议折中选择,如果使用其他方法(如上面的长链接)优化做的好的情况下,这个值可适当调高,不然让系统杀掉TW,有点暴力。如可用端口数量受限,且担心业务服务崩溃,可以适当调低阈值,起保护作用。
如果系统TW数量到达这个值,触发系统报错。理论无影响,不用太担心。

port Reuse

如前面文章聊聊TimeWait中提到,开启端口复用可有效减少端口使用,并发较大的Nginx建议按照以下配置开启:

1
2
3
net.ipv4.tcp_timestamps = 1 (必须开启,否则tw_reuse设置不生效)
net.ipv4.tcp_tw_recycle = 0
net.ipv4.tcp_tw_reuse = 1

配置后可以根据命令查看是否已经端口复用的连接数,该数为累计值:

1
2
3
4
cat /proc/net/netstat |awk '{print $13}' | head -2

TWRecycled
718881490

该值同时对应命令:

1
2
nstat |grep TcpExtTWRecycled
TcpExtTWRecycled 11 0.0

总结

以上根据日常经验,总结四种方法优化随机端口占用。读者可根据实际业务参考,也可邮箱联系作者交流。谢谢~



支付宝打赏 微信打赏

赞赏支持一下