服务器出现大量CLOSE_WAIT和TIME_WAIT如何解决

CLOSE_WAIT:

出现的原因:客户端异常断开,服务器没有捕捉到异常,从而没有使用close()关闭socket(调用close后就不再是CLOSE_WAIT状态)。
总的来说,就是服务器没有调用或没有及时调用close();

出现大量CLOSE_WAIT会导致:
大量socket的fd被占用,这个是有上限的,超过了就不能接受新的连接了。

TIME_WAIT:
TIME_WAIT一般出现在服务器主动要求关闭连接或服务器需要重启,TIME_WAIT状态时会导致端口不能复用,解决这个问题也很简单,把socket设置成SO_REUSEADDR就可以了(服务器主动关闭连接产生的TIME_WAIT不用理会,因为服务器不创建socket,只是接受请求而已,也就没有复用端口之说。服务器创建的唯一socket就是用于监听的那个,当重启后才需要复用这个端口)

参考:
https://www.zhihu.com/question/298214130

发布了138 篇原创文章 · 获赞 26 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/a13602955218/article/details/105296093