httpClient urlConnection activemq CLOSE_WAIT


CLOSE_WAIT 说明: http://blog.csdn.net/talent210/article/details/65434677


httpClient

httpClien使用不当会产生大量CLOSE_WAIT

解决方法:

一、 客户端主动关闭连接

1, 创建HTTPCLIENT时 使用关闭参数

HttpClient client = new HttpClient(new HttpClientParams(),new SimpleHttpConnectionManager(true) ); 


public SimpleHttpConnectionManager(boolean alwaysClose) {  
    super();  
    this.alwaysClose = alwaysClose;  
}  

2,在method.releaseConnection();之后加上 client.getHttpConnectionManager()).shutdown(); 
3,在method.releaseConnection();之后加上 client.getHttpConnectionManager().closeIdleConnections(0)


二、服务端主动关闭连接

method.setRequestHeader("Connection", "close");


HttpURLConnection 是否会出现close_wait?

当设置keepAlive=true时:
如果客户端调用HttpURLConnection.getInputSteam().close(), 然后又调用HttpURLConnection.disconnect(), 这样不会关闭Socket,此时Socket会被复用
如果客户端直接调用HttpURLConnection.disconnect(), InputSteam和Socket都会关闭


ActiveMQ

如果activeMQ 一直连接超时,而请求又多会出现大量CLOSE_WAIT



  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
HttpClient close_wait不释放是指当HttpClient执行完请求后,关闭连接后却不能及时释放连接,出现了close_wait状态,可能会导致资源的浪费和程序性能的降低。这种情况通常发现在服务器的TCP连接数一直在增加,却一直处于close_wait状态,并且ClientSocketImpl的状态一直是CLOSED_WAIT,造成资源的浪费和服务器处理能力的下降。 造成HttpClient close_wait不释放的原因可能有以下几点: 1. 连接池没有及时释放连接。HttpClient有一个默认的连接池管理器,如果连接池同时被多个线程调用,可能会出现连接池没有及时释放连接的情况,导致close_wait状态的产生。 2. Http客户端没有及时关闭连接。有些Http客户端请求完成后不主动释放连接,导致连接一直处于close_wait状态。 3. 服务器没有及时关闭连接。如果服务器没有在超时时间内关闭连接,那么连接就会一直处于close_wait状态。 解决HttpClient close_wait不释放的方法有以下几点: 1. 使用HttpClient连接池管理器时,需要设置合理的连接超时时间和请求超时时间,及时关闭闲置连接或者过期的连接。 2. 在Http客户端请求完成后,及时关闭连接,避免连接一直处于close_wait状态。 3. 调整服务器的超时时间,及时关闭连接。 4. 调整服务器的TCP/IP协议参数,设置合理的TIME_WAIT时间。 总之,为了避免出现close_wait状态的连接,需要在使用HttpClient连接池管理器时,合理调整连接超时时间和请求超时时间,并在请求完成后及时释放连接,避免资源的浪费和程序性能的降低。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值