如何解决TIME_WAIT的问题

宏哥 发布于 2012/11/21 13:51
阅读 911
收藏 9

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

这个有啥好的解决办法?

加载中
0
鉴客
鉴客
发现系统存在大量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 时间
0
皮总
皮总

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

0
宏哥
宏哥

非常感谢楼上两位.

这样就不用修改为长连接模式. 长连接模式是非常麻烦的.

0
mark35
mark35
tcp_tw_reuse 在某些精简版GHOST XP上可能会导致一些问题
0
宏哥
宏哥

引用来自“皮总”的答案

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用完.

皮总
皮总
都是生产环境照搬下来的。
返回顶部
顶部