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

正确解决java.net.BindException异常的有效解决方法 阅读详情

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

I/O exception (java.net.BindException) caught when processing request: Address already in use: connect (平台报出异常,传说该错误又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")

=====================================================================================================

XFire平台下的连接超时设置

100 (continue) read timeout. Resume sending the request

public Client loadClient() throws MalformedURLException, Exception{
Client client = new Client(new URL(url));
client.setTimeout(20000);
HttpClientParams params = new HttpClientParams();
// 避免'Expect: 100-continue' handshake
params.setParameter(HttpClientParams.USE_EXPECT_CONTINUE,Boolean.FALSE);
//设置ws连接超时时间
params.setParameter(HttpClientParams.CONNECTION_MANAGER_TIMEOUT, 20000l);
client.setProperty(CommonsHttpMessageSender.HTTP_CLIENT_PARAMS,params);
return client;
}

以上的做法在实际项目中发现行不通,现修改为:

URL _url = new URL(url);
HttpURLConnection httpConnection = (HttpURLConnection)_url.openConnection();
httpConnection.setReadTimeout(20000);//设置http连接的读超时,单位是毫秒

httpConnection.connect();
Client _client = new Client(httpConnection.getInputStream(), null);
_client.setProperty(CommonsHttpMessageSender.HTTP_TIMEOUT, String.valueOf( 20000 ));//设置发送的超时限制,单位是毫秒;
_client.setProperty(CommonsHttpMessageSender.DISABLE_KEEP_ALIVE, "true");
_client.setProperty(CommonsHttpMessageSender.DISABLE_EXPECT_CONTINUE, "true");

实践检验,可行!

======================================================================================================

以上从网上搜到两种解决办法,首先觉的最终原因是因为使用 xfire/HttpMethod 造成Socket连接池满,所以标题使用此标题。

第一种方法和第二种方法解决理论一致,出发点也一致,只不过设置的参数不一致。

其他,,,是否能解决正在论证中。。。

另外还有中办法,网上说这种办法的人很多,不过我觉得是治标不治本

短时间内new socket操作过多
而socket.close()操作并不能立即释放绑定的端口
而是把端口设置为TIME_WAIT状态
过段时间(默认240s)才释放(用netstat -na可以看到)
最后系统资源耗尽
(windows上是耗尽了pool of ephemeral ports 这段区间在1024-5000之间)

可以考虑增加端口数量来解决,不过你为何不考虑用Socket池呢?让一个Socket重复利用呢?

以下是修改方法
默认最大数量的短暂 TCP 端口为 5000 ' 适用于 ' 部分中包含产品中。 这些产品中已添加新参数。 要增加最大值是短暂端口, 请按照下列步骤操作:
1.
启动注册表编辑器。
2.
注册表, 中找到以下子项, 然后单击 参数 :
HKEY _ LOCAL _ MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters
3.
在 编辑 菜单, 单击 新建 , 然后添加以下注册表项:
MaxUserPort 值名称:
值类型: DWORD
值数据: 65534
有效范围: 5000 - 65534 (十进制)
默认: 0x1388 5000 (十进制)
说明: 此参数控制程序从系统请求任何可用用户端口时所用最大端口数。 通常, 1024 的值和含 5000 之间分配临时 (短期) 端口。
4.
退出注册表编辑器, 并重新启动计算机。

注意 一个附加 TCPTimedWaitDelay 注册表参数决定多久关闭端口等待可以重用关闭端口。


原文 :http://ks2144634.blog.163.com/blog/static/1335855032012819112953794/

torch_npu 用法笔记 阅读详情

相关推荐

QT5.14.2+VS2019安装配置教程Windows

QT5.14.2+VS2019安装使用教程Windows前言一. QT的下载与安装1. QT的下载2. QT的安装二. 配置Visual Studio编译器环境1. 扩展工具下载2. 扩展工具配置 前言 由于Visual Studio 的功能强大,很多开发人员比较熟悉使用,所以可以通过将QT配置到Visual Studio中进行开发。 一. QT的下载与安装 1. QT的下载 QT5.14.2下载地址 2. QT的安装 断开网络!断开网络!!断开网络!!! 安装QT之前,需要断开电脑的网络连接,这样就

Zander0的博客 7247

HttpClient工具类(支持多线程高并发)

今天在使用HttpClient的时候由于使用了多线程,所以出现了如下报错: I/O exception (java.net.BindException) caught when processing request to 于是最后改用连接池来创建httpClient 解决了这个问题,避免资源一直占用不释放的问题。 下面贴出两个工具类的代码供大家比较: 改造前的代码: import java.io.IOException; import java.net.URI; import java.util

爱米酱的博客 2559

HyperLynx VX2.5 实战:5分钟搞定LPDDR4X内存的批量仿真与报告分析

本文详细介绍了如何使用HyperLynx VX2.5进行LPDDR4X内存的批量仿真与报告分析,通过智能网络分组和并行计算技术,5分钟内即可完成全流程验证。文章涵盖工程准备、批量仿真配置、报告解析及典型问题解决方案,帮助工程师高效提升PCB仿真效率,确保移动设备内存接口的稳定性与性能。

weixin_42683394的博客 400

Java httpClient 使用连接池支持多线程高并发

当采用HttpClient httpClient = HttpClients.createDefault() 实例化的时候。会导致Address already in use的异常。 信息: I/O exception (java.net.BindException) caught when processing request to {}->http://**.**.**.** Add...

qzqanzc的博客 1万+

涨薪技术|Kubernetes(k8s)环境部署实战

这两者都是在/etc/docker/daemon.json里修改的,所以我们一起配置了就好了,首先执行下述命令编辑daemon.json:​​​​​​​。安装完成后,可以使用以下命令来查看dashboard访问的端口号​​​​​​​。网络插件CNI也是以容器的方式进行启动​​​​​​​。安装完成后可以检查是否拉取了对应的容器​​​​​​​。再使用以下命令进行安装:​​​​​​​。打开后输入以下内容:​​​​​​​。安装1.19.0版本​​​​​​​。修改IP地址:​​​​​​​。

m0_60889254的博客 1085

MedicalNet实战:3D医疗影像分割从零到部署(PyTorch+ResNet50)

本文详细介绍了基于PyTorch和MedicalNet预训练模型进行3D医疗影像分割的完整实战流程。通过加载ResNet50预训练权重进行迁移学习,大幅降低了对标注数据量的需求,并提升了模型性能。文章涵盖了从数据准备、模型微调、训练优化到最终部署的每一步,为医疗AI开发者提供了从零到部署的清晰指南。

weixin_29062671的博客 587

使用HttpClient请求超时- I/O exception (java.net.SocketException) caught when processing request: 连接超时

这里写自定义目录标题背景问题排查项目场景:问题描述:原因分析:解决方案:功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入 背景 问题排查 首先排查这个报错是建立链接报错,不是被调用方等待超时或者被调用方服务扛不住。 看日志发现首次发

weixin_43831997的博客 1万+

PLC编程入门基础知识

PLC即为可编程逻辑控制器,实质是一种专用于工业控制的计算机,其硬件结构基本上与微型计算机相同。

SANRENYIXING的博客 2万+

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

【转】 使用 XFire 访问webService, 运行一段时间后, 使用netstat -ano命令,发现服务器上有大量的CLOSE_WAIT连接,导致之后的WebService服务访问经常失败。 原因如下: CLOSE_WAIT是Tcp状态迁移中的一个 当服务端主动关闭而客户端没来及响应进入的一个的状态,此状态TCP层默认时间大概为2小时左右 故导致了达到最大连接数出现了假死 ...

kenvic00000的专栏 221

MATLAB R2023a下载链接及软件安装教程

MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。a是上半年,b是下半年版本,但是有些小弱们总是觉得只要是b一定功能多,这不一定的,同年版本b比a可能稍微全点,不同年的,比如21b,22a,肯定22a要比21b版本高功能多了。10、选择目标文件夹,默认的是C盘,想修改的话可以单击【浏览】,然后单击【下一步】

qq_53545309的博客 5158

Calibre LVS 问题解析

LVS常见问题与解决办法

m0_61544122的博客 2万+

xfire设置连接超时问题

近期使用xfire作为客户端访问WS,结果因为目标主机假死,造成客户端一致无法返回,后续调用也无法进行。更悲催的是采用定时器轮询调用,结果整个定时器都阻塞无法执行后续任务。 跟踪了一下代码发现引起上诉问题的代码出现在此处(红色部分): public Client loadClient() throws MalformedURLException, Exception{ ...

Done 497

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java.net.BindException: 无法指定被请求的地址

单机版启动报错:java.net.BindException: 无法指定被请求的地址: Service ‘sparkDriver’ failed after 16 retries (on a random free port)!解决办法是在配置文件中添加执行命令:source /etc/profile,让环境配置生效再次启动,就可以了我是使用SparkPi来计算Pi的值。

forget_wt的博客 3106

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

【jmeter】 I/O exception (java.net.SocketException) caught when processing request to URL: Connect

【jmeter】 I/O exception (java.net.SocketException) caught when processing request to URL: Connect 问题记录

Yin_m的博客 5782

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

已解决java.net.BindException异常的正确解决方法,亲测有效!!!

已解决java.net.BindException异常的正确解决方法,亲测有效!!!

小明的Java问道之路 9208

使用HttpClient时抛出I/O异常

使用HttpClient时抛出I/O异常,大多是因为网络问题,可以说是这辈子遇见最奇葩的问题了,电脑插上网线,上传图片抛出IO异常I/O exception (java.net.SocketException) caught when processing request to {s}->https://请求域名: Connection reset by peer: socket write...

haomazdl的博客 4416

I/O exception (java.net.SocketException) caught when processing request: Connect

Exception 【一个故障引发的话题】 最近,项目中的短信模块收到一个故障日志,要求我协助调查一下: 2010-05-07 09:22:07,221 [?:?] INFO httpclient.HttpMethodDirector - Retrying request :org.apache.commons.httpclient.H...

WGH100817的博客 4954

java高并发连接池_Java httpClient 使用连接池支持多线程高并发

当采用HttpClient httpClient = HttpClients.createDefault() 实例化的时候。会导致Address already in use的异常。信息: I/O exception (java.net.BindException) caught when processing request to {}->http://**.**.**.** Addres...

weixin_34729012的博客 810

httpclient4 多线程请求RetryExec I/O exception 问题解决

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34248487的博客 3750

【Java】已解决java.net.BindException异常

当你使用ServerSocket或Socket类的bind()方法时,如果指定的地址和端口已经被其他应用程序占用,或者由于某些配置问题导致无法绑定,就会抛出这个异常。在Java网络编程中,java.net.BindException异常是一个常见的错误,它通常发生在尝试将套接字(Socket)绑定到特定地址和端口时。这个异常通常表明地址已经被使用,或者出于其他原因无法绑定。在这个示例中,如果8080端口已经被其他服务占用,那么ServerSocket的构造函数会抛出BindException。

屿小夏.的知识博客 1297

Exception in thread "main" java.net.BindException: Address already in use: NET_Bind

在Java开发Socket中,可能会出现以下信息: Exception in thread "main" java.net.BindException: Address already in use: NET_Bind 这是由于端口被占用了。 解决的办法有以下几种: 1、更改程序中“ServerSocket ser = new ServerSocket(12333);”中的端口为其他端口 ...

云之彼端的博客 4万+

java socket异常总结

Java Socket 网络编程常见异常 1.java.net.SocketTimeoutException . 这 个异 常比较常见,socket 超时。 一般有 2 个地方会抛出这个,一个是 connect 的 时 候 , 这 个 超 时 参 数 由connect(SocketAddress endpoint,int timeout) 中的后者来决定,还有就是 setSoTimeout(...

welcome66的专栏 894
上一篇: xfire设置连接超时问题
下一篇: 函数式编程扫盲篇
mmoooodd
博客等级 码龄18年 35粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值