Chinaunix首页 | 论坛 | 博客
  • 博客访问: 471647
  • 博文数量: 135
  • 博客积分: 1860
  • 博客等级: 上尉
  • 技术积分: 1441
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-05 20:39
文章分类
文章存档

2012年(2)

2011年(130)

2009年(2)

2008年(1)

我的朋友

分类:

2011-08-11 14:49:19

 

    新增的一组Apache服务器上线以来,我用netstat -an命令发现服务器中有大量状态为TIME-WAITTCP连接,于是用/sbin/sysctl -a查看了一下Linux的各项内核参数,并翻阅有关资料,决定修改其中的两项参数,以达到减少TCP连接中TIME-WAIT sockets的目的。

     

    vi /etc/sysctl.conf

    编辑/etc/sysctl.conf文件,增加三行:

    引用

    net.ipv4.tcp_syncookies = 1

    net.ipv4.tcp_tw_reuse = 1

    net.ipv4.tcp_tw_recycle = 1

    说明:

    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,表示关闭。

     

    再执行以下命令,让修改结果立即生效:

    /sbin/sysctl -p

     

    用以下语句看了一下服务器的TCP状态:

    netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'

    返回结果如下:

    ESTABLISHED 1423

    FIN_WAIT1 1

    FIN_WAIT2 262

    SYN_SENT 1

    TIME_WAIT 962

     

    效果:处于TIME_WAIT状态的sockets从原来的10000多减少到1000左右。处于SYN_RECV等待处理状态的sockets0,原来的为50300

     

    Pasted from <http://blog.s135.com/post/271/>

     

    关于TCP_TIMEWAIT的问题由来已久,在此补充一下原因吧。都知道tcp的三次握手后建立连接,连接建立后,如果client主动关闭连接,则此连接会被内核回收,而很多时候,比如上面的兄台的PHP程序没有关闭数据库连接,这个时候,server端就无法知道此连接是否还继续有效,也就是,cilent是在组装数据还是已经掉线了呢?那么就进入timewait了。

    另外,对于张兄的修改,也补充一下:

    net.ipv4.tcp_syncookies = 1,这句是可以的,不提

    net.ipv4.tcp_tw_reuse = 1 ,这句对于有些时候,客户端没有真的关闭连接而是在等待发送数据的时候,重用接口会导致数据出错,所以,只是针对HTTP类型可以开启,对于其他长时间连接处理类型,就关上比较稳妥

    net.ipv4.tcp_tw_recycle = 1 这句基本上来说用处不大,开启快速回收后,系统还是会一样取系统等待时间,故,要想真的减少timewait时间的话,将内核中的等待时间参数修改为一个合适的值比较妥当,尤其是对于内网机器来说。

     

    Pasted from <http://blog.s135.com/post/271/>

     

  1. ##########################################   
  2. # 设定一些内核参数   
  3. ##########################################   
  4.   
  5. #启动 SYN 泛洪保护   
  6. echo "1" > /proc/sys/net/ipv4/tcp_syncookies   
  7.   
  8. #启用反向路径源认证,防止欺骗    
  9. echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter   
  10.   
  11. #关闭 icom echo 广播包请求   
  12. echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts   
  13.   
  14. #拒绝源路由包   
  15. echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route   
  16.   
  17. #仅仅接收发给默认网关列表中网关的ICMP重定向消息   
  18. echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects   
  19.   
  20. #记录来自非法ip的请求   
  21. echo "1" > /proc/sys/net/ipv4/conf/all/log_martians   
  22.  

    Pasted from <http://niyunjiu.javaeye.com/blog/350820>

     

     

阅读(214) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~