当前位置: 当前位置:首页 > 国际新闻 > closewait状态产生原因(closewait) 正文

closewait状态产生原因(closewait)

2024-10-23 13:28:08 来源:无事生非网 作者:每日趣闻 点击:422次
导读 大家好,态产小豆豆来为大家解答以上的问题。closewait状态产生原因,生原closewait这个很多人还不知道,态产现在让我们一起来看看吧!1、生原当第一次遇到这 大家好,态产小豆豆来为大家解答以上的问题。closewait状态产生原因,生原closewait这个很多人还不知道,态产现在让我们一起来看看吧!1、生原当第一次遇到这种问题的态产时候,你可能会有如下的生原问题:其实,你真正想问的态产是:TCP通道是一个连接,连接的生原两端都可以向通道里写数据或者从通道里读数据,连接的态产两端都可以发起关闭操作。2、生原整个TCP通道的态产关闭流程如下:A(socketfd:10)3、TIME_WAIT时间一般会比较长。4、尽量避免TIME_WAIT过多的一端主动关闭socket使用SocketPool,避免频繁创建/关闭socket提到ThriftThreadPoolServer有时候会出现较多的closewait状态,有朋友问我这是不是thrift的bug?写过Server比较多的同志们应该能意识到这个问题的原因,不值得说,可是我今天实在是太郁闷无聊了,我就写写我的想法吧。5、我觉得这当然不能算是Thrift的Bug,如果出现了这样的问题,其实是因为错误的选择了Server的类型,错误的实现了Client,过于保守的ServerMaxConnection配置等等原因。6、对于ThreadPoolServer而言,每一个客户端连接,Server端都需要提供一个固定的线程来维护,在空闲时,线程堵塞在read()操作,等待客户端数据的到来。7、ThriftThreadPoolServer中使用的默认线程池是定长线程池,意味着Server端能提供的线程池数是有限的。8、当线程用完时,新的连接将不能得到Server殷勤的服务,它不会在乎你的生死,你必须等待。9、Server会接受这个连接,连接成功建立;Server没有合适的线程来处理这个连接,于是将这个连接放到暂存列表;如果这个时候有线程空闲了,则一切顺利,这个线程将接管这个连接;但遗憾的是,我们没有空闲线程,所以这个连接一直处于空闲状态,直到客户端程序timeout(如果设置了timeout的话);连接timeout,意味着暂存列表里的连接已经失效了,此时对应的socket处于CLOSE_WAIT中(出现了本文开头的情况),遗憾的是,我们依然没有空闲的线程来处理这个连接,所以它一直处于CLOSE_WAIT中。10、终于,某一个时刻,有一个客户端关闭了连接,我们有了空闲线程,它去查看暂存列表。11、发现有一个socketfd,尝试去接管它,对这个fd执行read(),然后得到一个ConnectionReseterror,终于,我们可以优雅的关闭它了(CLOSE_WAIT结束)。12、以上就是全部的故事。本文到此分享完毕,希望对大家有所帮助。
作者:国际新闻
------分隔线----------------------------
头条新闻
图片新闻
新闻排行榜