由于使用 xfire/HttpMethod 造成Socket连接池满的问题及解决办法

【转】
使用 XFire 访问webService, 运行一段时间后, 使用netstat -ano命令,发现服务器上有大量的CLOSE_WAIT连接,导致之后的WebService服务访问经常失败。

原因如下:
CLOSE_WAIT是Tcp状态迁移中的一个
当服务端主动关闭而客户端没来及响应进入的一个的状态,此状态TCP层默认时间大概为2小时左右
故导致了达到最大连接数出现了假死


解决办法:
对于使用httpclient的程序
只需要在HttpMethod method = new GetMethod("url");加上一行HTTP头的设置即可
method.setRequestHeader("Connection", "close"); 

对于使用xFire的程序
xFire是基于PostMethod实现的,CommonsHttpMessageSender类中会读取DISABLE_KEEP_ALIVE属性如果值为true的话,那么就会将PostMethod加入 Connection close的属性
在实例化httpClient对象后,添加下面一行代码即可
client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true")

你可能感兴趣的:(socket)