首页  ·  知识 ·  基础设施
LINUX下解决time_wait连接过多
网友   http://linux.chinaitlab.com/kernel/818582.html  数据中心  编辑:德仔   图片来源:网络
经常检查apache的连接数,会发现很多无用的time_wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说微软的IE连接时产生的Time_wa
经常检查apache的连接数,会发现很多无用的time_wait连接。有人说这是正常的,是因为一个请求中途中断造成的;还有人说微软的IE连接时产生的Time_wait会比用Firefox连接时多。个人认为有一定的Time_wait是正常的,如果超过了连接数的比例就不是很正常,所以还是找来方法解决一下。
  先检查一下time wait的值:
  [root@aaa1 ~]#sysctl -a | grep time | grep wait
  net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 120
  net.ipv4.netfilter.ip_conntrack_tcp_timeout_close_wait = 60
  net.ipv4.netfilter.ip_conntrack_tcp_timeout_fin_wait = 120
  这里解决问题的关键是如何能够重复利用time_wait的值,检查net.ipv4.tcp_tw当前值:
  [root@aaa1 ~]# sysctl -a|grep net.ipv4.tcp_tw
  net.ipv4.tcp_tw_reuse = 0
  net.ipv4.tcp_tw_recycle = 0
  增加或修改net.ipv4.tcp_tw值,将当前的值更改为1分钟(reuse是表示是否允许重新应用处于TIME-WAIT状态的socket用于新的TCP连接; recycle是加速TIME-WAIT sockets回收):
  [root@aaa1 ~]# vi /etc/sysctl.conf
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  使内核参数生效:
  [root@aaa1 ~]# sysctl -p
  用netstat再观察时会发现已经恢复正常。
  结合DDOS和TIME_WAIT过多,建议增加如下参数设置:
  # Use TCP syncookies when needed
  net.ipv4.tcp_syncookies = 1
  net.ipv4.tcp_synack_retries=3
  net.ipv4.tcp_syn_retries=3
  net.ipv4.tcp_max_syn_backlog=2048
  # Enable TCP window scaling
  net.ipv4.tcp_window_scaling: = 1
  # Increase TCP max buffer size
  net.core.rmem_max = 16777216
  net.core.wmem_max = 16777216
  # Increase Linux autotuning TCP buffer limits
  net.ipv4.tcp_rmem = 4096 87380 16777216
  net.ipv4.tcp_wmem = 4096 65536 16777216
  # Increase number of ports available
  net.ipv4.tcp_fin_timeout = 30
  net.ipv4.tcp_keepalive_time = 300
  net.ipv4.tcp_tw_reuse = 1
  net.ipv4.tcp_tw_recycle = 1
  net.ipv4.ip_local_port_range = 5000 65000
  附:查看当前的连接数状况
  netstat -nat|awk '{print awk $NF}'|sort|uniq -c|sort -n
  1 established
  1 State
  2 LAST_ACK
  4 CLOSING
  4 FIN_WAIT2
  9 LISTEN
  17 FIN_WAIT1
  18 SYN_RECV
  27 ESTABLISHED
  811 TIME_WAIT
  上面的命令可以帮助分析哪种tcp状态数量异常。其中的SYN_RECV表示正在等待处理的请求数;ESTABLISHED表示正常数据传输状态;TIME_WAIT表示处理完毕,等待超时结束的请求数。
  附:查看IP连接数状况
  netstat -nat|grep ":80"|awk '{print $5}' |awk -F: '{print $1}' | sort| uniq -c|sort -n
  发现异常的,可以封了这个IP
 
本文作者:网友 来源: http://linux.chinaitlab.com/kernel/818582.html
CIO之家 www.ciozj.com 微信公众号:imciow
   
免责声明:本站转载此文章旨在分享信息,不代表对其内容的完全认同。文章来源已尽可能注明,若涉及版权问题,请及时与我们联系,我们将积极配合处理。同时,我们无法对文章内容的真实性、准确性及完整性进行完全保证,对于因文章内容而产生的任何后果,本账号不承担法律责任。转载仅出于传播目的,读者应自行对内容进行核实与判断。请谨慎参考文章信息,一切责任由读者自行承担。
延伸阅读