前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何避免TCP的TIME_WAIT状态(高并发)

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

作者头像
程序员小王
发布2018-04-13 10:20:17
2.7K0
发布2018-04-13 10:20:17
举报
文章被收录于专栏:架构说

如何减少 tcp time_wait 状态

方法1 :线程池

代码语言:javascript
复制
线程池作用socket连接不关闭 自然减少time_wait状态  

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

代码语言:javascript
复制
 socket 异常终止连接发送RST  不进入四次挥手手  

解释最清楚的当属《Unix网络编程卷1》中的说明(7.5章节),这里简单摘录: SO_LINGER的值用如下数据结构表示:

代码语言:javascript
复制
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)

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

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

代码语言:javascript
复制
net.ipv4.tcp_tw_reuse = 1net.ipv4.tcp_tw_recycle = 1

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2017-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Offer多多 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 如何减少 tcp time_wait 状态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档