5
回答
如何解决TIME_WAIT的问题
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

本地有些请求是 http短连接的, 这样就造成大量的TIME_WAIT 状态, 

这个有啥好的解决办法?

<无标签>
举报
宏哥
发帖于5年前 5回/891阅
共有5个答案 最后回答: 5年前
发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,
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 = 30

然后执行 /sbin/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 时间

net.core.netdev_max_backlog = 3000

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.tcp_retries2 = 5 
net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 3600 
net.ipv4.tcp_keepalive_intvl = 30 
net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_max_tw_buckets = 6000

引用来自“皮总”的答案

net.core.netdev_max_backlog = 3000

net.ipv4.tcp_max_syn_backlog = 4096

net.ipv4.tcp_retries2 = 5 
net.ipv4.tcp_fin_timeout = 30

net.ipv4.tcp_keepalive_time = 3600 
net.ipv4.tcp_keepalive_intvl = 30 
net.ipv4.tcp_keepalive_probes = 9

net.ipv4.tcp_max_tw_buckets = 6000

我最终用了你这个设置, 并进行了测试

我发现TIME_WAIT始终被控制在6000以内, 效果非常好. 

这样就不用担心我自己的客户端把TIME_WAIT用完.

--- 共有 1 条评论 ---
皮总都是生产环境照搬下来的。 5年前 回复
顶部