看来这个确切的问题之前已经被问过并由作者回答。不幸的是,原始论坛现在是只读的,我不能再扩展该线程或直接向作者发送消息。 (dangling-ports-via-spring-in-close-wait)
我的环境:
我也看到许多CLOSE_WAIT连接闲置。
是否正确回答"获取httpclient的句柄并从应用程序中关闭套接字" ?
如果是这样,任何人都可以提供代码片段如何从应用程序访问httpclient? 如果这不是正确的方法,那么解决它的正确方法是什么?
答案 0 :(得分:0)
看起来Florent Guillaume有答案:Using HttpClient properly
一种简单的方法是添加:method.addHeader(“Connection”,“close”); 有关其他避免CLOSE_WAIT的方法,请阅读他的博客文章。
答案 1 :(得分:0)
我有同样的问题: 我使用 org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean 来调用从一个应用程序到另一个应用程序的方法。这两个应用程序都部署在同一个tomcat上。
当我们进行大量连接的压力测试时,它最终结束了,因此我们在 netstat -a 中有几百个连接到tomcat。他们中的大多数人的状态为CLOSE_WAIT。几个小时后他们还在那里。
阅读完一些文档后,我决定更改 HttpInvokerProxyFactoryBean 。它有 httpInvokerRequestExecutor 字段,默认情况下设置为 org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor 但是,还有更高级的 org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor 它支持身份验证,连接池等。通常,它应该正确管理连接池,但它没有。
我还尝试添加标题连接关闭标题,但它也没有帮助。
所以,在一天结束的时候,我决定通过RabbitMQ进行远程调用。