others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

linux服务器大量TIME-WAIT socket处理方法

访问量:1143 创建时间:2020-12-24

业务应用出现端口无法使用的情况

排查系统连接数量:

[root@yonghong1 ~]# ss -an 
####省略部分输出####
TIME-WAIT   0      0                                                                ::ffff:10.0.0.11:36013                                       
TIME-WAIT   0      0                                                                ::ffff:10.0.0.11:33328                                       
TIME-WAIT   0      0                                                                ::ffff:10.0.0.11:38671                                       
TIME-WAIT   0      0                                                                ::ffff:10.0.0.11:49103   
[root@yonghong1 ~]# ss -an  | wc -l
28348
[root@yonghong2 ~]# sysctl -a | grep range
net.ipv4.ip_local_port_range = 32768    61000
上面显示程序可以使用的端口有(61000-32768)个,wc出来的结果已经使用了28348,有大量TIME-WAIT状态套接字占用端口
[root@y1 ~]# vi /etc/sysctl.conf
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10 
[root@y1 ~]# sysctl -p

net.ipv4.tcp_syncookies = 1 表示开启SYN Cookies。当出现SYN等待队列溢出时,启用cookies来处理,可防范少量SYN攻击,默认为0,表示关闭; net.ipv4.tcp_tw_reuse = 1 表示开启重用。允许将TIME-WAIT sockets重新用于新的TCP连接,默认为0,表示关闭; net.ipv4.tcp_tw_recycle = 1 表示开启TCP连接中TIME-WAIT sockets的快速回收,默认为0,表示关闭。 net.ipv4.tcp_fin_timeout 修改系統默认的 TIMEOUT 时间

再次查看,端口被TIME-WAIT占用情况得到极大改善。

[root@yonghong1 ~]# ss -an  | wc -l
466

也可以:降低net.ipv4.tcp_max_tw_buckets为5000,

[root@yonghong1 ~]# sysctl -a | grep net.ipv4.tcp_max_tw_buckets
net.ipv4.tcp_max_tw_buckets = 262144
登陆评论: 使用GITHUB登陆