据博客之前写的几篇文章,可以了解到TimeWait和随机端口的相关知识,总结下优化随机端口占用的几种方法。戳进来-->
根据博客之前写的几篇文章,可以了解到TimeWait和随机端口的相关知识,总结下优化随机端口占用的几种方法。
四种方法
net.ipv4.ip_local_port_range
方法一,增加随机端口范围。
1 | sysctl -w net.ipv4.ip_local_port_range=1024 65535 |
keepalive
方法二,如有需要,增加keepalive配置
1 | location / { |
net.ipv4.tcp_max_tw_buckets
这个参数,在需要消耗随机端口的场景中,可以是个安全值。当TW数超过这个值时,系统会主动回收掉这个链接,释放端口。但是如果TW到这个数后,系统会有报错信息,类似:
1 | kernel: [5205501.103660] TCP: time wait bucket table overflow |
这个值建议折中选择,如果使用其他方法(如上面的长链接)优化做的好的情况下,这个值可适当调高,不然让系统杀掉TW,有点暴力。如可用端口数量受限,且担心业务服务崩溃,可以适当调低阈值,起保护作用。
如果系统TW数量到达这个值,触发系统报错。理论无影响,不用太担心。
port Reuse
如前面文章聊聊TimeWait中提到,开启端口复用可有效减少端口使用,并发较大的Nginx建议按照以下配置开启:
1 | net.ipv4.tcp_timestamps = 1 (必须开启,否则tw_reuse设置不生效) |
配置后可以根据命令查看是否已经端口复用的连接数,该数为累计值:
1 | cat /proc/net/netstat |awk '{print $13}' | head -2 |
该值同时对应命令:
1 | nstat |grep TcpExtTWRecycled |
总结
以上根据日常经验,总结四种方法优化随机端口占用。读者可根据实际业务参考,也可邮箱联系作者交流。谢谢~
赞赏支持一下