没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
系统调优,你所不知道的
TIME_WAIT和CLOSE_WAIT
来源微信订阅号:⼤房说
作者:⼤房
你遇到过TIME_WAIT的问题吗?
我相信很多都遇到过这个问题。⼀旦有⽤户在喊:⽹络变慢了。第⼀件事情
就是,netstat -a | grep TIME_WAIT | wc -l ⼀下,哎呀妈呀,⼏千个
TIME_WAIT。
然后,做的第⼀件事情就是:打开Google或者Bing,输⼊关键词:too many
time wait。⼀定能找到解决⽅案,⽽排在最前⾯或者被很多⼈到处转载的解
决⽅案⼀定是:
打开 sysctl.conf ⽂件,修改以下⼏个参数:
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_timestamps = 1
你也会被告知,开启tw_recylce和tw_reuse⼀定需要timestamps的⽀持,⽽且
这些配置⼀般不建议开启,但是对解决TIME_WAIT很多的问题,有很好的
⽤处。
接下来,你就直接修改了这⼏个参数,reload⼀下,发现,咦,没⼏分钟,
TIME_WAIT的数量真的降低了,也没发现哪个⽤户说有问题,然后就没有
然后了。
做到这⼀步,相信50%或者更⾼⽐例的开发就已经⽌步了。问题好像解决
了,但是,要彻底理解并解决这个问题,可能就没这么简单,或者说,还有
很长的路要⾛!
什么是TIME-WAIT和CLOSE-WAIT?
所谓,要解决问题,就要先理解问题。随便改两⾏代码,发现bug“没有
了”,也不是bug真的没有了,只是隐藏在更深的地⽅,你没有发现,或者以
你的知识⽔平,你⽆法发现⽽已。
⼤家知道,由于socket是全双⼯的⼯作模式,⼀个socket的关闭,是需要四次
握⼿来完成的。
主动关闭连接的⼀⽅,调⽤close();协议层发送FIN包
被动关闭的⼀⽅收到FIN包后,协议层回复ACK;然后被动关闭的⼀
⽅,进⼊CLOSE_WAIT状态,主动关闭的⼀⽅等待对⽅关闭,则进⼊
FIN_WAIT_2状态;此时,主动关闭的⼀⽅ 等待 被动关闭⼀⽅的应⽤
程序,调⽤close操作
被动关闭的⼀⽅在完成所有数据发送后,调⽤close()操作;此时,协议
层发送FIN包给主动关闭的⼀⽅,等待对⽅的ACK,被动关闭的⼀⽅进
⼊LAST_ACK状态;
主动关闭的⼀⽅收到FIN包,协议层回复ACK;此时,主动关闭连接的
⼀⽅,进⼊TIME_WAIT状态;⽽被动关闭的⼀⽅,进⼊CLOSED状态
等待2MSL时间,主动关闭的⼀⽅,结束TIME_WAIT,进⼊CLOSED状
态
通过上⾯的⼀次socket关闭操作,你可以得出以下⼏点:
1. 主动关闭连接的⼀⽅ - 也就是主动调⽤socket的close操作的⼀⽅,最终
会进⼊TIME_WAIT状态
2. 被动关闭连接的⼀⽅,有⼀个中间状态,即CLOSE_WAIT,因为协议
层在等待上层的应⽤程序,主动调⽤close操作后才主动关闭这条连接
3. TIME_WAIT会默认等待2MSL时间后,才最终进⼊CLOSED状态;
4. 在⼀个连接没有进⼊CLOSED状态之前,这个连接是不能被重⽤的!
所以,这⾥凭你的直觉,TIME_WAIT并不可怕(not really,后⾯讲),
CLOSE_WAIT才可怕,因为CLOSE_WAIT很多,表⽰说要么是你的应⽤程
序写的有问题,没有合适的关闭socket;要么是说,你的服务器CPU处理不
过来(CPU太忙)或者你的应⽤程序⼀直睡眠到其它地⽅(锁,或者⽂件I/O
等等),你的应⽤程序获得不到合适的调度时间,造成你的程序没法真正的
执⾏close操作。
这⾥又出现两个问题:
1. 上⽂提到的连接重⽤,那连接到底是个什么概念?
2. 协议层为什么要设计⼀个TIME_WAIT状态?这个状态为什么默认等待
2MSL时间才会进⼊CLOSED
先解释清楚这两个问题,我们再来看,开头提到的⼏个⽹络配置究竟有什么
⽤,以及TIME_WAIT的后遗症问题。
Socket连接到底是个什么概念?
⼤家经常提socket,那么,到底什么是⼀个socket?其实,socket就是⼀个 五
元组,包括:
1. 源IP
2. 源端⼜
3. ⽬的IP
4. ⽬的端⼜
5. 类型:TCP or UDP
这个五元组,即标识了⼀条可⽤的连接。注意,有很多⼈把⼀个socket定义
剩余15页未读,继续阅读
资源评论
文润观书
- 粉丝: 22
- 资源: 318
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功