知识屋:更实用的电脑技术知识网站
所在位置:首页 > 操作系统 > linux

优化TCP/IP连接,减少TIME-WAIT的命令

发布时间:2014-09-05 14:49:52作者:知识屋

优化TCP/IP连接,减少TIME-WAIT的命令
 
(一)TCP/IP连接的状态和对应的个数: 
# netstat -an | awk '/^tcp/ {++s[$NF]} END {for(a in s) print a, s[a]}' 
 
(二)提升服务器的负载能力: 
# vim /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 = 5 
 
最后输入下面的命令,让内核参数生效: 
# /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 时间。 
 
(三)优化TCP/IP的可使用端口范围,进一步提升服务器的并发能力(针对tcp流量比较大的服务器) 
  # vim /etc/sysctl.conf,添加如下参数:  
 
    net.ipv4.tcp_keepalive_time = 1200 
    net.ipv4.ip_local_port_range = 10000 65000 
    net.ipv4.tcp_max_syn_backlog = 8192 
    net.ipv4.tcp_max_tw_buckets = 5000 
 
参数说明:{ 
net.ipv4.tcp_keepalive_time = 1200 表示当keepalive起用的时候,TCP发送keepalive消息的频度。缺省是2小时,改为20分钟。 
 
net.ipv4.ip_local_port_range = 10000 65000 表示用于向外连接的端口范围。缺省情况下很小:32768到61000,改为10000到65000。(注意:这里不要将最低值设的太低,否则可能会占用掉正常的端口!) 
net.ipv4.tcp_max_syn_backlog = 8192 表示SYN队列的长度,默认为1024,加大队列长度为8192,可以容纳更多等待连接的网络连接数。 
 
net.ipv4.tcp_max_tw_buckets = 5000 表示系统同时保持TIME_WAIT的最大数量,如果超过这个数字,TIME_WAIT将立刻被清除并打印警告信息。默认为180000,改为5000。对于Apache、Nginx等服务器,上几行的参数可以很好地减少TIME_WAIT套接字数量,但是对于 Squid,效果却不大。此项参数可以控制TIME_WAIT的最大数量,避免Squid服务器被大量的TIME_WAIT拖死。 
(四)修改 linux kernel 的 tcp time wait的时间(适用于大量短连接的情况) 
在 $KERNEL/include/net/tcp.h里面,有下面的行: 
      #define TCP_TIMEWAIT_LEN (60*HZ) /* how long to wait to destroy TIME-WAIT 
      * state, about 60 seconds */ 
      而这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。如果我们希望减少 TIME_WAIT 状态的数目(从而节省一点点内核操作时间),那么可以把这个数值设置低一些,根据我们的测试,设置为 10 秒比较合适,也就是把上面的修改为: 
 
      #define TCP_TIMEWAIT_LEN (10*HZ) /* how long to wait to destroy TIME-WAIT 
      * state, about 60 seconds */ 
 
  然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态大大减少: 
  netstat -ant | grep -i time_wait |wc -l 
  一般情况都可以至少减少2/3。也能相应提高系统应对短连接的速度 
 
(免责声明:文章内容如涉及作品内容、版权和其它问题,请及时与我们联系,我们将在第一时间删除内容,文章内容仅供参考)
收藏
  • 人气文章
  • 最新文章
  • 下载排行榜
  • 热门排行榜