解决apache服务器的time_wait和fin_wait1过多等问题

jackxiang 2010-8-31 10:39 | |
对一些大流量的web服务器来说,比较常见的问题就是time_wait会很多,起因大多都是apache里 keepalive 没开的原因,将这个开启,相对会少一些,但大流量时还是比较多,这里还有另外一个参数设置


net.ipv4.tcp_max_tw_buckets = 5000


如果不想time_wait不要太多,只要把这个值调低,就肯定不会超过了

但会出现一个新问题,就是在系统日志里,会很多类似这样的警告

Nov 27 15:50:01 localhost kernel: printk: 9498 messages suppressed.
Nov 27 15:50:01 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:06 localhost kernel: printk: 9562 messages suppressed.
Nov 27 15:50:06 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:11 localhost kernel: printk: 10120 messages suppressed.
Nov 27 15:50:11 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:16 localhost kernel: printk: 9182 messages suppressed.
Nov 27 15:50:16 localhost kernel: TCP: time wait bucket table overflow
Nov 27 15:50:21 localhost kernel: printk: 9626 messages suppressed.

这个警告其实不影响使用和性能,只是烦而已。我曾为避免这个提示,就将 net.ipv4.tcp_max_tw_buckets 调得很大,接着 time_wait 也就很大了。这也是上面这个问题,在网上搜索到的解决办法了。不想这个警告出现,重新编译内核,可以避免。

还有另一外问题,就是 fin_wait1 过多的问题,这个情况,一般的服务器上不会有。至少我的情况是这样

但在用了集群/负载均衡(LVS)中,下面的机器,就有这种情况,也曾为解决这个问题苦恼了挺久,经过今天的测试,也可以解决了。

只要在/etc/sysctl.conf 中加入

net.ipv4.tcp_keepalive_probes = 5
net.ipv4.tcp_keepalive_intvl = 15
net.ipv4.tcp_retries2 = 5
net.ipv4.tcp_orphan_retries = 3
net.ipv4.tcp_reordering = 5
net.ipv4.tcp_retrans_collapse = 0

就会减少很多了,关键的是 net.ipv4.tcp_orphan_retries 这个

来源:http://meisw.51099.com/show-234-1.html

作者:jackxiang@向东博客 专注WEB应用 构架之美 --- 构架之美,在于尽态极妍 | 应用之美,在于药到病除
地址:http://jackxiang.com/post/3458/
版权所有。转载时必须以链接形式注明作者和原始出处及本声明!


最后编辑: jackxiang 编辑于2010-8-31 13:24
评论列表
发表评论

昵称

网址

电邮

打开HTML 打开UBB 打开表情 隐藏 记住我 [登入] [注册]