1

看来这个确切的问题已经被作者提出并回答了。不幸的是,原来的论坛现在是只读的,我不能再扩展该线程或直接向作者发送消息。(悬空端口通过弹簧关闭等待

我的环境:

  • apache-tomcat-7.0.53
  • CommonsHttpInvokerRequestExecutor
  • 春季 3.2.11.RELEASE
  • httpclient-4.3.5

我也看到了很多 CLOSE_WAIT 连接。

“获取httpclient的句柄并从应用程序关闭套接字”的正确答案是什么?

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

4

2 回答 2

0

我遇到了几乎相同的问题:我正在使用 org.springframework.remoting.httpinvoker.HttpInvokerProxyFactoryBean将方法从一个应用程序调用到另一个应用程序。两个应用程序都部署在同一个 tomcat 上。

当我们对大量连接进行压力测试时,结果是我们在netstat -a中有数百个连接到 tomcat。其中大多数的状态为 CLOSE_WAIT。几个小时后,他们还在那里。

在阅读了一些文档后,我决定更改HttpInvokerProxyFactoryBean。它有httpInvokerRequestExecutor字段,默认设置为org.springframework.remoting.httpinvoker.SimpleHttpInvokerRequestExecutor 但是,有更高级的org.springframework.remoting.httpinvoker.HttpComponentsHttpInvokerRequestExecutor 支持身份验证,连接池等。通常,它应该管理连接池正确,但它没有。

我也尝试添加 Header Connection 关闭标题,但它也没有帮助。

因此,最终,我决定通过RabbitMQ进行远程调用。

于 2015-02-10T09:37:01.137 回答
0

看起来 Florent Guillaume 有答案:正确使用 HttpClient

一种简单的方法是添加:method.addHeader("Connection", "close"); 有关避免 CLOSE_WAIT 的其他方法,请阅读他的博客文章。

于 2014-12-11T13:10:41.717 回答