如何避免TCP的TIME_WAIT状态(高并发)

如何避免TCP的TIME_WAIT状态(高并发)1、设置l_onoff为0,则该选项关闭,l_linger的值被忽略,等于内核缺省情况,close调

大家好,欢迎来到IT知识分享网。

如何减少 tcp time_wait 状态

方法1 :线程池

线程池作用socket连接不关闭 自然减少time_wait状态

方法2: 通过setsockopt API设置socket选项 SO_LINGER

 socket 异常终止连接发送RST 不进入四次挥手手

解释最清楚的当属《Unix网络编程卷1》中的说明(7.5章节),这里简单摘录:

SO_LINGER的值用如下数据结构表示:

struct linger { int l_onoff; /* 0 = off, nozero = on */ int l_linger; /* linger time */};

其取值和处理如下:

1、设置 l_onoff为0,则该选项关闭,l_linger的值被忽略,等于内核缺省情况,close调用会立即返回给 调用者,如果可能将会传输任何未发送的数据;

2、设置 l_onoff为非0,l_linger为0,则套接口关闭时TCP夭折连接,TCP将丢弃保留在套接口发送缓冲 区中的任何数据并发送一个RST给对方, 而不是通常的四分组终止序列,这避免了TIME_WAIT状态;

3、设置 l_onoff 为非0,l_linger为非0,当套接口关闭时内核将拖延一段时间(由l_linger决定)。

如果套接口缓冲区中仍残留数据,进程将处于睡眠状态,直 到(a)所有数据发送完且被对方确认,之后进行正常的终止序列(描述字访问计数为0)

如何避免TCP的TIME_WAIT状态(高并发)

方法3:修改系统配置 (不建议)

sysctl改两个内核参数就行了,如下:

net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1

简单来说,就是打开系统的TIMEWAIT重用和快速回收

更多面试技巧请关注


免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/60145.html

(0)

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

关注微信