HttpClient超时故障

Java HttpClient资源管理:CloseableHttpClient连接池与超时重试实战 HTTP客户端是Java应用网络通信的基础组件,其核心在于连接生命周期管理。CloseableHttpClient作为Apache HttpClient 4.x中实现AutoCloseable的关键实现类,通过PoolingHttpClientConnectionManager提供可配置的连接复用能力,结合RequestConfig实现连接、读取与请求获取三重超时控制,并支持自定义HttpRequestRetryHandler应对瞬时网络故障。这些机制共同保障了高并发、弱网络环境下的服务稳定性与资源可控性, 阅读详情

网站这边多次因为HttpClient超时问题导致Tomcat停止服务,影响非常不好,而且问题重复出现,查看网络,没有比较明确介绍httpclient所有超时相关的设置(大部分只提到连接超时(connection timeout),读超时(socket timeout),对连接池超时提到的比较少):

<dependency>

<groupId>commons-httpclient</groupId>

<artifactId>commons-httpclient</artifactId>

<version>3.1</version>

</dependency>

Tomcat进程假死,导致页面无法打开,堆栈信息如下:
Name: trhead-142
State: WAITING onorg.apache.commons.httpclient.MultiThreadedHttpConnectionManager$ConnectionPool@69a4cb
Total blocked: 0 Total waited: 1
Stack trace:
java.lang.Object.wait(Native Method)
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection(MultiThreadedHttpConnectionManager.java:518)
org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.getConnectionWithTimeout(MultiThreadedHttpConnectionManager.java:416)
org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:153)
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397)
org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323)
com.madding.test.MyRunnable.run(MyTest1.java:53)
java.lang.Thread.run(Thread.java:619)

大部分线程等待在:org.apache.commons.httpclient.MultiThreadedHttpConnectionManager.doGetConnection

分析:

问题:很明显连接池超时没设置,导致请求在线程池中无限等待,进而导致Tomcat进程假死。

解决办法1:httpclient.setHttpConnectionFactoryTimeout(1000),设置连接池超时。

解决办法2:httpclient.getParams().setConnectionManagerTimeout(1000),设置连接池超时。

进一步分析:

为什么没设置这个会导致请求等待:

MultiThreadedHttpConnectionManager代码在获取连接时去连接池取,而连接池在没设置超时timeToWait为0,即一直处于等待状态,如果没有notify不会结束等待。

试用

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.2</version>

</dependency>

发现代码中即使不设置线程池超时,在高并发下也能正常访问,查看代码,发现是因为在默认没设置线程池超时时把连接超时的时间作为线程超时时间。



HttpClient遇到I/O SocketException并捕获时,处理请求时发生连接重置错误 当使用HttpClient发送请求时,遇到I/O SocketException并捕获到连接重置错误时,可能是由于网络问题、服务器故障或其他原因引起的。然而,有时候在使用HttpClient发送请求时,可能会遇到I/O SocketException并捕获到连接重置的错误。本文将介绍这个问题的原因,并提供解决方法。当使用HttpClient发送请求时,如果出现连接重置错误,通常表示在客户端和服务器之间的连接被意外地中断或重置。通过设置最大重试次数和计数器来控制重试的次数,并在达到最大重试次数后退出循环。 阅读详情

相关推荐

PR控制以及使用PR控制用于单相离/并网逆变器

最近想学习一下并网逆变器,需要用到PR控制,全网找遍了许多学习资料,终于掌握的差不多了,在此做个记录,以及个人对PR(Proportional Resonant)控制的理解。在去年7月准备电赛的时候偶然看到有几篇讲解数字滤波器,第一次接触传递函数离散化,深刻被数字时代的数字方式折服,改改代码,就可以实现不同的截至频率,甚至不同阶数,而模拟方式还要改元器件。当时就感觉这玩意太他妈牛逼了,很想学懂它,奈何学不会呀。后面全身心做电赛,就忘了这事儿。直至最近学习PR控制,当初的感觉又回来了,一股劲儿吃下来了。

xht2403267701的博客 3万+

不得不知的Web知识 —— HttpClient中SocketTimeOut、ConnectionTimeOut与ConnectionManagerTimeOut区别

资料来源:https://www.baeldung.com/httpclient-timeout 背景:最近用HttpClient设置SocketTimeOut时发现自己原本理解有误,借此查阅资料并做记录 Connection Timeout 作用:自请求发起开始与远程服务器建立连接的最长等待时间。 Socket Timeout 作用:指最长等待数据的时间,或建立连接后两个数据包之间的最大传输时间间隔。 Connection Manager Timeout 作用:自发起请求起,等待获取来自.

简简单单记录 887

从零开始学DAG:用dagitty软件快速构建因果图的5个步骤

本文为初学者提供了使用dagitty软件快速构建因果图的5个实用步骤。通过一个公共卫生研究实例,详细演示了如何从定义核心变量开始,逐步引入混杂、中介和碰撞变量,最终利用dagitty的自动分析功能识别最小充分调整集,从而科学指导研究设计与统计分析,有效提升因果推断的严谨性。

ii567的博客 799

vue项目中net::ERR_CONNECTION_TIMED_OUT错误

出现这种错误 一般来说 是你切换网络造成的 导致IP地址改变 而此时你项目还在使用的是原来的ip : 解决办法 清除游览器的缓存然后重启vue项目

weixin_45203607的博客 3400

无人机机场自动化巡检钢铁厂管廊技术方案

摘要:针对钢厂管廊人工巡检效率低、成本高等问题,提出5G+无人机自主巡检解决方案。该系统由智能机库、5G无人机、AI分析平台等组成,可实现自动起降、实时数据传输、缺陷智能识别等功能。无人机配备四合一云台相机,支持42分钟续航和复杂环境飞行,通过深度学习算法自动生成巡检报告。方案实施后可提升巡检效率3倍以上,降低人工成本和安全风险,实现全天候自动化巡检,为钢厂管廊安全管理提供智能化技术支持。(149字)

gxdhlg的专栏 1685

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

Windows窗口编程中的WM_PAINT、WM_ERASEBKGND、InvalidateRect、UpdateWindow、BeginPaint和EndPaint等函数详解

dvlinker的技术专栏 7165

HttpClient在使用中有两个超时时间

HttpClient在使用中有两个超时时间。  一、连接超时:connectionTimeout     1.指的是连接一个url的连接等待时间。     2.设置方法为:  Java代码   HttpClient client = new HttpClient();   HttpMethod method = new GetMethod("http://test.com");

rgq562248600的专栏 1075

手把手教你学simulink(95.1)--PID控制实例:基于Simulink的PID控制温度控制系统建模与仿真

温度控制是工业自动化、家用电器、医疗设备以及航空航天等领域中常见的控制问题。通过精确的温度控制,可以提高生产效率、降低能耗并确保产品质量。PID(比例-积分-微分)控制器因其结构简单、性能稳定且易于实现而被广泛应用于各种温度控制系统。本项目旨在通过MATLAB/Simulink平台设计和验证一个基于PID控制的温度控制系统,重点研究PID参数调优方法、系统动态响应特性以及稳态误差消除能力。

MHD0815的博客 792

httpclient connect timed out

日志中存在大量的连接超时内容: errorMsg=Connect to api.10646.cn:443 [api.10646.cn/122.97.213.18] failed: connect timed out 首先使用telnet排除客户端原因 telnet api.10646.cn 443 阻塞 telnet www.baidu.com 443 正常 说明客户端是正常的,很可能是被服务器限制了 查看与服务器122.97.213.18之间的连接状态 netstat -n | grep 122.97.2

weixin_48352162的博客 2747

从零实现深度学习框架【实现自己的PyTorch(已完结)】

本着“凡我不能创造的,我就不能理解”的思想,此系列文章会基于纯Python以及NumPy从零创建自己的深度学习框架,该框架类似PyTorch能实现自动求导。

日积月累,天道酬勤 6862

12、无人机系统的建模与仿真

本文深入探讨了无人机系统的建模与仿真技术,涵盖其发展需求、历史演变、动力学建模方法、常用参考框架与状态变量表示,并分析了在控制系统设计、操作员培训和子系统测试中的关键应用。文章还介绍了不同类型无人机(固定翼、旋翼、混合翼)在建模与仿真中的差异,提出了多学科融合、高精度实时仿真及VR/AR技术等未来发展趋势,并给出了实际建模与仿真的标准操作流程,为无人机系统的设计与优化提供了全面的技术支持与展望。

websocket5live的博客 196

cnpm install 报错:Connect timeout for 5000ms

cnpm install 报错:Connect timeout for 5000ms vue项目执行cnpm install 报入下错误: Get /binary-mirror-config/latest from https://r.npm.taobao.org error: ConnectionTimeoutError: Connect timeout for 5000ms, GET https://registry.npmjs.com/binary-mirror-config/latest -2 (c

weixin_40668374的博客 3814

详解Agent Skills:让AI拥有更多专业能力(什么是Agent Skills?如何创建?如何使用?如何获取?)

本文分享如何将零散指令沉淀为可复用的 AI 能力模块🧩,介绍什么是Agent Skills?如何创建?如何获取?📚

XiaoqiangClub的博客 1269

做支付遇到的HttpClient大坑(一)

这个案例是最近刚发生不久的,只是这个雷的历史实在是久远。 公司在3月底因为一次腾讯云专线故障,整个支付系统在高峰期停止服务将近10分钟。而且当时为了快速解决问题止损,重启了支付服务,事后也就没有了现场。我们支付组在技术架构上原先对专线故障的场景做了降级预案,但故障时预案并没有生效,所以这次我们需要排查清楚降级没有生效的原因(没有现场的事后排查,挑战非常大)。 微信支付流程 首先回...

weixin_34138139的博客 167

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

closeablehttpclient 设置超时时间_挖出一个隐藏在支付系统很长时间的雷

这个案例是最近刚发生不久的,只是这个雷的历史实在是久远。公司在3月底因为一次腾讯云专线故障,整个支付系统在高峰期停止服务将近10分钟。而且当时为了快速解决问题止损,重启了支付服务,事后也就没有了现场。我们支付组在技术架构上原先对专线故障的场景做了降级预案,但故障时预案并没有生效,所以这次我们需要排查清楚降级没有生效的原因(没有现场的事后排查,挑战非常大)。 微信支付流程首先回顾一下微信支付的流程这...

weixin_34026053的博客 2385

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

因RestTemplate超时引发的血案

最近线上出了一次故障,收银台系统所有服务全部假死。订单量瞬时下降,造成很大损失。故障总结,导致问题的原因有两方面:数据库慢查询RestTemplate超时时间设置不生效。spring-w...

xmt1139057136的专栏 2077

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

httpclient超时总结

&lt;style type="text/css"&gt; &lt;!-- @page {margin:0.79in} p {margin-bottom:0.08in} --&gt; &lt;/style&gt; Httpclient超时 背景: 网站这边多次因为httpclient调用超时时间没设置好导致关掉,影响非常不好,而且问题重复出现,查看网络,没有比较明确介绍h...

御道 350

ASP.Net Core2.1中的HttpClientFactory系列二:集成Polly处理瞬态故障

    前言:最近,同事在工作中遇到了使用HttpClient,有些请求超时的问题,辅导员让我下去调研一下,HttpClinet的使用方式已经改成了之前博客中提到的方式,问题的原因我已经找到了,就是因为使用了伪异步,导致阻塞主线程。在之前的博客中有园友,建议在使用静态的HttpClinet时务必使用它的Async方法,所以就得从头到尾异步化。这一点在之前的文章中没有提,这里作为补充,也感谢这位园友...

ahilll的博客 951

web.xml超时时间不生效_一个隐藏在支付系统很长时间的雷

这个案例是最近刚发生不久的,只是这个雷的历史实在是久远。公司在3月底因为一次腾讯云专线故障,整个支付系统在高峰期停止服务将近10分钟。而且当时为了快速解决问题止损,重启了支付服务,事后也就没有了现场。我们支付组在技术架构上原先对专线故障的场景做了降级预案,但故障时预案并没有生效,所以这次我们需要排查清楚降级没有生效的原因(没有现场的事后排查,挑战非常大)。微信支付流程首先回顾一下微信支付的流程(也...

weixin_39963255的博客 340

apache httpclient 连接池 工具_一次线上故障:数据库连接池泄露后的思考

一次线上故障:数据库连接池泄露后的思考一:初步排查早上作为能效平台系统的使用高峰期,系统负载通常比其它时间段更大一些,某个时间段会有大量用户登录。当天系统开始有用户报障,发布系统线上无法构建发布,然后后续有用户不能登录系统,系统发生假死,当然系统不是真的宕机,而是所有和数据库有关的连接都被阻塞,随后查看日志发现有大量报错。和数据库连接池相关:Caused by: org.springframewo...

weixin_39535752的博客 358

【高并发场景下的HttpClient优化】:Java 11超时设置的5个关键点

掌握Java 11 HttpClient的超时设置技巧,有效应对高并发场景下的连接阻塞与资源浪费。涵盖连接、响应、读写超时配置,结合异步非阻塞优势提升系统稳定性,适用于微服务间通信与API调用优化,值得收藏。

GatherLume的博客 882

记一次HttpClient连接池超时问题排查:Timeout waiting for connection from pool

情景 后端部署了新的代码,在几分钟后似乎所有的爬取相关的服务均不可用。一服务频繁报错提示:「连接超时: 当前过于拥挤」。 获取连接池状态 首先立即打开日志查看错误消息,显示:Timeout waiting for connection from pool ,字面意思是从连接池中等待超时。为了了解这个时候的连接池状态如何,在查找资料后,使用以下的代码在出现异常的同时打印当前连接池状态。 for(Ht...

Nosa 7767

Httpclient核心架构设计

原文链接 大概两周前,团队需要对httpclient进行调优,领到任务后,大致研究了源码很快就确定了调优方向。但是对于一个重度强迫症患者,对一件事情的理解就只有两种程度,完全懂或者完全不懂,于是悲催的开始httpclient整体架构的探索之路,每天晚上回家抽点边角料的时间写,之前的理解建...

chengli1824的博客 88
上一篇: MySQL数据库命令行下的数据备份与恢复命令
下一篇: Tomcat 拒绝服务总结
kobejayandy
博客等级 码龄18年 2853粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值