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

网友投稿 672 2022-09-28

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

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

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

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

av.com # av.com TIME_WAIT 47144 # TIME_WAIT 45920SYN_SENT 1 # SYN_SENT 1 ESTABLISHED 104 # ESTABLISHED 94 LISTEN 7 # LISTEN 7 av.com # av.com TIME_WAIT 45670 # TIME_WAIT 48396ESTABLISHED 102 # ESTABLISHED 99 LISTEN 7 # LISTEN 7 av.com # av.comTIME_WAIT 45671 # TIME_WAIT 46268SYN_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状态倍数级下降,我们实测效果如下:

内核编译升级参考:

​​      │ 内核编译优化主机

av.com (主机名) │av.com (主机名) TIME_WAIT 46366 │TIME_WAIT 9419ESTABLISHED 99 │FIN_WAIT1 3 LISTEN 7 │ESTABLISHED 118 av.com │LISTEN 7 TIME_WAIT 46125 │av.com FIN_WAIT1 1 │TIME_WAIT 8950SYN_SENT 1 │ESTABLISHED 105 ESTABLISHED 99 │LISTEN 7 LISTEN 7 │av.com av.comTIME_WAIT 46591 │ESTABLISHED 114 ESTABLISHED 101 │LISTEN 7 LISTEN 7 │av.com av.comTIME_WAIT 44307 │FIN_WAIT1 1 ESTABLISHED 95 │ESTABLISHED 104 LISTEN 7 │LISTEN 7 av.comTIME_WAIT 46679 │TIME_WAIT 9763ESTABLISHED 99 │FIN_WAIT1 2 LISTEN 7 │ESTABLISHED 116 av.comTIME_WAIT 46833 │av.com SYN_SENT 1 │TIME_WAIT 9173ESTABLISHED 99 │FIN_WAIT1 1 LISTEN 7 │ESTABLISHED 103 av.comTIME_WAIT 45555 │LISTEN 7 SYN_SENT 3 │av.com ESTABLISHED 104 │TIME_WAIT 9598LISTEN 7 │ESTABLISHED 117 av.comTIME_WAIT 45214 │av.com ESTABLISHED 96 │TIME_WAIT 9315LISTEN 7 │SYN_SENT 1 av.comTIME_WAIT 46498 │LISTEN 7 SYN_SENT 1 │av.com ESTABLISHED 93 │TIME_WAIT 9524LISTEN 7 │ESTABLISHED 116 av.comTIME_WAIT 46720 │av.com SYN_SENT 1 │TIME_WAIT 9110ESTABLISHED 95 │ESTABLISHED 104 LISTEN 7 │LISTEN 7

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

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Puppet学习之文件管理
下一篇:ceph集群快照、clone相关命令整理v1
相关文章

 发表评论

暂时没有评论,来抢沙发吧~