内核编译解决 TCP连接大量 TIMEWAIT

     随着业务量的增长,业务服务器网络压力不断增大,查看后端服务器网络连接状态,发现TIME_WAIT状态连接巨多,TIME_WAIT 占用大量的连接端口不释放,影响业务服务响应速度。同时大量的每个TCP连接都各自有个数据结构,叫TCP Control Block.Time_wait的时候这个数据结构没有被释放。所以当有太多的TCP连接时,内存可能会被占用很多。

网络密集型后台服务器,网络连接状态:

av.com                                   #    av.com              

TIME_WAIT       47144                    #    TIME_WAIT       45920

SYN_SENT        1                        #    SYN_SENT        1    

ESTABLISHED     104                      #    ESTABLISHED     94  

LISTEN          7                        #    LISTEN          7    


av.com                                   #    av.com              

TIME_WAIT       45670                    #    TIME_WAIT       48396

ESTABLISHED     102                      #    ESTABLISHED     99  

LISTEN          7                        #    LISTEN          7    


av.com                                   #    av.com

TIME_WAIT       45671                    #    TIME_WAIT       46268

SYN_SENT        2                        #    ESTABLISHED     100  

ESTABLISHED     93                       #    LISTEN          7    

LISTEN          7             


      超过三四万。这个时候,我们需要修改 linux kernel 的 tcp time wait的时间,有个 可以调整 /etc/sysctl.conf网络控制相关的参数,网上资料很多。

      但是修改内核参数效果甚微。经过测试高并发的服务器调整内核参数,我们这边业网络环境,tcp time_wait 能降低%10左右,后期业务压力不断攀升,内核参数优化后的服务器tcp time_wait 会再次爬到一个高点,如上图。

      这时该如何解决问题那? 先看一下time_wait 在什么环境下会生成?

            

          TCP结束的过程如下:

Server                             Client

-------------- FIN -------------->  server: fin_wait_1


<------------- ACK --------------- client: close_wait  server:fin_wait_2


<------------- FIN  --------------- client发出fin之后就关闭


-------------- ACK ------------->  server发出ack后进入time_wait状态;


        Time_Wait的默认时间是2倍的MLS,MLS(Maximum Segment Lifetime)是TCP片在网上的最长存活时间,它的作用和IP数据包的TTL类似。 主要作用是保证关闭的TCP端口不立即被使用。因为当网络存在延迟时,可能当某个端口被关闭后,网络中还有一些重传的TCP片在发向这个端口,如果这个端口立即建立新的TCP连接,则可能会有影响。所以使用2倍的MSL时间来限制这个端口立即被使用。


 查询相关资料,内核中一个宏定义,在 $KERNEL/include/net/tcp.h里面,这个宏是真正控制 TCP TIME_WAIT 状态的超时时间的。内容如下:

       #define TCP_TIMEWAIT_LEN (60*HZ)     

 修改这个宏定义数值设置,根据我们的测试,常用的值有以下三种:30秒,1分钟,2分钟,可以根据业务实际情况进行实测,我们这边网络压力比较大,通过压测最终确定设置为 10 秒,也就是把上面的修改为:

           #define TCP_TIMEWAIT_LEN (10*HZ)

然后重新编译内核,重启系统即可发现短连接造成的TIME_WAIT状态倍数级下降,我们实测效果如下:

  

内核编译升级参考:  

http://michaelkang.blog.51cto.com/1553154/1266825


优化系统内核参数主机       │ 内核编译优化主机

av.com (主机名)    │av.com    (主机名)       

TIME_WAIT       46366      │TIME_WAIT       9419

ESTABLISHED     99         │FIN_WAIT1       3   

LISTEN          7          │ESTABLISHED     118 

av.com    │LISTEN          7   

TIME_WAIT       46125      │av.com              

FIN_WAIT1       1          │TIME_WAIT       8950

SYN_SENT        1          │ESTABLISHED     105 

ESTABLISHED     99         │LISTEN          7   

LISTEN          7          │av.com              

av.com                     │TIME_WAIT       9668

TIME_WAIT       46591      │ESTABLISHED     114 

ESTABLISHED     101        │LISTEN          7   

LISTEN          7          │av.com              

av.com                     │TIME_WAIT       9224

TIME_WAIT       44307      │FIN_WAIT1       1   

ESTABLISHED     95         │ESTABLISHED     104 

LISTEN          7          │LISTEN          7   

av.com                     │av.com              

TIME_WAIT       46679      │TIME_WAIT       9763

ESTABLISHED     99         │FIN_WAIT1       2   

LISTEN          7          │ESTABLISHED     116 

av.com                     │LISTEN          7   

TIME_WAIT       46833      │av.com              

SYN_SENT        1          │TIME_WAIT       9173

ESTABLISHED     99         │FIN_WAIT1       1   

LISTEN          7          │ESTABLISHED     103 

av.com                     │SYN_RECV        1   

TIME_WAIT       45555      │LISTEN          7   

SYN_SENT        3          │av.com              

ESTABLISHED     104        │TIME_WAIT       9598

LISTEN          7          │ESTABLISHED     117 

av.com                     │LISTEN          7   

TIME_WAIT       45214      │av.com              

ESTABLISHED     96         │TIME_WAIT       9315

LISTEN          7          │SYN_SENT        1   

av.com                     │ESTABLISHED     106 

TIME_WAIT       46498      │LISTEN          7   

SYN_SENT        1          │av.com              

ESTABLISHED     93         │TIME_WAIT       9524

LISTEN          7          │ESTABLISHED     116 

av.com                     │LISTEN          7   

TIME_WAIT       46720      │av.com              

SYN_SENT        1          │TIME_WAIT       9110

ESTABLISHED     95         │ESTABLISHED     104 

LISTEN          7          │LISTEN          7  


同样的网路压力情况下,优化编译后的内核 TIME_WAIT  降低接近5倍,效果很显著。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值