首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >当服务器未正常关闭连接时,阻止来自客户端的CLOSE_WAITs

当服务器未正常关闭连接时,阻止来自客户端的CLOSE_WAITs
EN

Stack Overflow用户
提问于 2013-06-13 18:45:23
回答 1查看 2.4K关注 0票数 2

我们有一个连接到外部计费服务器的应用程序。一旦客户端的服务器出现故障,就会有数百个连接处于CLOSE_WAIT状态。

我已经检查了客户端代码。而且客户端似乎正在正常关闭TCP连接。

如果发生这种情况是因为服务器端的问题导致服务器没有正确关闭连接,那么有没有一种方法可以防止客户端将套接字保持在CLOSE_WAIT状态?

我还观察到线程计数和cpu使用率比平时上升得更多。

应用程序重新启动后,即使在几个小时后也没有CLOSE_WAIT构建,线程计数和cpu使用率恢复到正常水平。

如果服务器有时无法正常关闭连接,除了重启客户端删除CLOSE_WAITs之外,我们还能做什么吗?(我的意思是,有没有什么代码改进可以防止客户端出现这种问题)

我们在客户端使用定制的JDiameter代码连接到计费服务器。

(我们无法访问服务器端代码)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-13 19:31:26

如果发生这种情况,是因为服务器端的问题导致服务器没有正确关闭连接...

事实并非如此。

RFC 793声明:"CLOSE_WAIT -表示正在等待来自本地用户的连接终止请求。“这意味着对等项已关闭连接: TCP已收到FIN,它正在等待本地应用程序也执行同样的操作。

如果您在自己的连接端遇到此问题,则表明一件事:您没有关闭自己的套接字。您忽略了套接字上的EOS条件或异常,并继续使用它。

解决方案:不要。EOS意味着您必须停止读取并关闭套接字。除SocketTimeoutException之外的任何IOException都具有相同的含义。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17085079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档