洞察纵观鸿蒙next版本,如何凭借FinClip加强小程序的跨平台管理,确保企业在数字化转型中的高效运营和数据安全?
716
2022-09-28
内核编译解决 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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~