通过“CLOSE_WAIT”中的弹簧远程处悬空端口

时间:2014-12-09 13:23:36

标签: spring-remoting

看来这个确切的问题之前已经被问过并由作者回答。不幸的是,原始论坛现在是只读的,我不能再扩展该线程或直接向作者发送消息。 (dangling-ports-via-spring-in-close-wait

我的环境:

  • Apache的Tomcat的7.0.53
  • CommonsHttpInvokerRequestExecutor
  • Spring 3.2.11.RELEASE
  • 的HttpClient-4.3.5

我也看到许多CLOSE_WAIT连接闲置。

是否正确回答"获取httpclient的句柄并从应用程序中关闭套接字" ?

如果是这样,任何人都可以提供代码片段如何从应用程序访问httpclient? 如果这不是正确的方法,那么解决它的正确方法是什么?

2 个答案:

答案 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进行远程调用。