生产排查org.apache.http.NoHttpResponseException: 127.0.0.1:9000 failed to respond

news2024/11/29 3:40:23

生产环境,请求方调用我方地址,发生异常NoHttpResponseException,错误详情:

org.apache.http.NoHttpResponseException: 127.0.0.1:9000 failed to respond
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:141)
	at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(DefaultHttpResponseParser.java:56)
	at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:259)
	at org.apache.http.impl.DefaultBHttpClientConnection.receiveResponseHeader(DefaultBHttpClientConnection.java:163)
	at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(CPoolProxy.java:157)
	at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:273)
	at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:125)
	at org.apache.http.impl.execchain.MainClientExec.execute(MainClientExec.java:272)
	at org.apache.http.impl.execchain.ProtocolExec.execute(ProtocolExec.java:186)
	at org.apache.http.impl.execchain.RetryExec.execute(RetryExec.java:89)
	at org.apache.http.impl.execchain.RedirectExec.execute(RedirectExec.java:110)
	at org.apache.http.impl.client.InternalHttpClient.doExecute(InternalHttpClient.java:185)
	at org.apache.http.impl.client.CloseableHttpClient.execute(CloseableHttpClient.java:83)
	at com.http.CommonHttpClient.sendPost(CommonHttpClient.java:96)
	at com.http.CommonHttpClient.lambda$main$0(CommonHttpClient.java:121)
	at java.util.stream.ForEachOps$ForEachOp$OfInt.accept(ForEachOps.java:205)
	at java.util.Spliterators$IntArraySpliterator.forEachRemaining(Spliterators.java:1032)
	at java.util.Spliterator$OfInt.forEachRemaining(Spliterator.java:693)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.ForEachOps$ForEachTask.compute(ForEachOps.java:291)
	at java.util.concurrent.CountedCompleter.exec(CountedCompleter.java:731)
	at java.util.concurrent.ForkJoinTask.doExec(ForkJoinTask.java:289)
	at java.util.concurrent.ForkJoinPool$WorkQueue.execLocalTasks(ForkJoinPool.java:1040)
	at java.util.concurrent.ForkJoinPool$WorkQueue.runTask(ForkJoinPool.java:1058)
	at java.util.concurrent.ForkJoinPool.runWorker(ForkJoinPool.java:1692)
	at java.util.concurrent.ForkJoinWorkerThread.run(ForkJoinWorkerThread.java:157)

看一下报错的源代码,相关注释提示服务端关闭了连接导致的:
在这里插入图片描述
想要解决问题,首先需要复现一下,于是本地启动服务,设置tomcat保活时间1s,

server:
  tomcat:
    keep-alive-timeout: 1000

使用common-httpclient4.5.10连接池,模拟一下请求,这里设置:

connManager.setMaxTotal(5);
connManager.setDefaultMaxPerRoute(5);

因为连接就是一组 ip:port 抽象,所以在模拟代码里获取一下本地的连接端口,在main测试中模拟20个请求,发送请求后休眠一会,推进连接过期,服务端关闭连接:

BasicHttpContext httpContext = new BasicHttpContext();
final long l = System.currentTimeMillis();
try {
    response = httpClient.execute(httpPost, httpContext);
    local = JSONObject.parseObject(JSON.toJSONString(httpContext.getAttribute("http.connection"))).getString("localPort");
    HttpEntity httpEntity = response.getEntity();
    result = EntityUtils.toString(httpEntity, "utf-8");
    System.out.println("normal" + " : " + l + " : " + result + " : " + local);
} catch (Exception e) {
    System.out.println("error " + " : " + l + " : " + local);
    e.printStackTrace();
}
-----------------------------------------------------------------------------------
public static void main(String[] args) {
        try {
            IntStream.range(1, 20).parallel().sorted().forEach(e -> {
                try {
                    sendPost("http://127.0.0.1:9000/receive", "{}");
                    TimeUnit.MILLISECONDS.sleep(995L);
                } catch (Exception exception) {
                    exception.printStackTrace();
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

在这里插入图片描述
可以看到本地和服务器共有5个连接,51573,51574,51575,51576,51577,其中有两笔异常数据报错:NoHttpResponseException,其中75,76两个端口连接后续没有被继续使用,怀疑已经被关闭了看一下抓包数据:
在这里插入图片描述
这两个端口处确实已经四次挥手关闭连接了,看样子应该是连接已不可用,发起请求时返回的错误。如果连接不可用,连接池会清除掉不可用连接,重新创建新的连接。再看下httpclient默认的保活策略:
在这里插入图片描述
问题也复现了,相关原因也基本确定了,解决办法就是保证conn的可用性:
1.关闭keep-alive,设置header Connection close
2.客户端实现一下保活策略,时间小于服务端的keep-alive-timeout,连接提前过期释放;当然应该配置合理的连接池大小,不必过大
3.客户端发生此类错误时,应该启用重试机制

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/857935.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

C++核心编程:函数提高

函数默认参数 在C中&#xff0c;函数的形参列表是可以有默认值的。 语法&#xff1a; 返回值类型 函数名 (参数 默认值){}示例&#xff1a; #include<iostream> using namespace std;//函数默认参数//如果我们传入了自己的数据就使用自己的数据&#xff0c;否则就是…

联合体union

结构体中的成员彼此是独立存在的&#xff0c;分布在不同的内存单元中 共用体的成员是“一体的”&#xff0c;使用同一个内存单元 #include<stdio.h> int main() {union u {int n;char c[4];};union u u1;u1.n 0x11223344;printf("%x\n", u1.n); …

软工导论知识框架(六)面向对象分析

前言&#xff1a;绘制各种类型的图是重点&#xff0c;对于面向对象建模中需要绘制的图总结在第五期中&#xff1a; ​软工导论知识框架&#xff08;五&#xff09;面向对象方法学 一.分析过程 1.获取需求 与用户交谈&#xff0c;向用户提问题&#xff1b; 参观用户的工作流…

YOLOv5可视化界面

Pyside6可视化界面 安装Pyside6 激活之前的虚拟环境yolov5 在该环境的终端输入以下命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6输入where python找到当前使用的Python的路径 找到该路径下的designer.exe文件&#xff08;/Lib/site-packages/PySi…

IP地址定位技术在电商行业的应用

IP地址定位技术在电商行业的广泛应用引起了行业内外的广泛关注。该技术能够提供精确的位置信息&#xff0c;对于电商运营商而言有助于提供更加个性化和便捷的购物体验。 IP地址定位是一种通过Internet协议&#xff08;IP&#xff09;地址识别用户地理位置的技术。在电商行业中&…

windows录屏指南,最详细的教程来了!

在现代科技时代&#xff0c;录屏成为了一种非常常见的技术&#xff0c;它可以让我们轻松记录电脑屏幕上的内容&#xff0c;包括教学、演示、游戏体验等。windows作为全球最流行的操作系统之一&#xff0c;自然也提供了多种方式来录制屏幕。本文将为您介绍三种windows录屏方法&a…

B2B2C多用户手机购物商城快速搭建(java开源)

要快速搭建一个B2B2C多用户手机购物商城&#xff0c;需要使用Java语言和开源框架进行开发。以下是一个基本的搭建步骤&#xff1a; 选择合适的开发框架 首先需要选择一个适合开发B2B2C多用户手机购物商城的Java开源框架&#xff0c;它提供了丰富的功能模块和灵活的扩展性&…

cesium学习记录05-加载数据

1. 矢量数据&#xff1a; 1.1. GeoJSON 定义&#xff1a; 一个基于JSON的地理数据格式&#xff0c;Cesium支持GeoJSON的直接加载。 例子&#xff1a; 加载一个简易故宫建筑的GeoJSON数据。 代码&#xff1a; /*** 添加故宫geojson数据*/AddGuGong() {var viewer this.v…

基于百度语音识别API智能语音识别和字幕推荐系统——深度学习算法应用(含全部工程源码)+测试数据集

目录 前言总体设计系统整体结构图系统流程图 运行环境模块实现1. 数据预处理2. 翻译3. 格式转换4. 音频切割5. 语音识别6. 文本切割7. main函数 系统测试工程源代码下载其它资料下载 前言 本项目基于百度语音识别API&#xff0c;结合了语音识别、视频转换音频识别以及语句停顿…

从数据仓库到数据结构:数据架构的演变之路

在上个世纪&#xff0c;从电子商务巨头到医疗服务机构和政府部门&#xff0c;数据已成为每家组织的生命线。有效地收集和管理这些数据可以为组织提供宝贵的洞察力&#xff0c;以帮助决策&#xff0c;然而这是一项艰巨的任务。 尽管数据很重要&#xff0c;但CIOinsight声称&…

【C++】AVL树模拟实现插入功能

AVL树模拟实现插入 前言正式开始树节点树insert旋转左单旋右单旋左右双旋右左双旋 用旋转来平衡树测试 前言 本篇主要介绍AVL树的插入功能。其中就包含了最重要的旋转。 通过旋转来使得树平衡&#xff0c;是学习AVL树的一个重点&#xff0c;也是也是一个难点。 正式开始 先…

虹科方案 | 汽车总线协议转换解决方案

汽车总线&#xff1a; 汽车总线是一种用于在车辆电子系统中传输数据和控制信息的通信系统。它允许不同的电子控制单元&#xff08;ECU&#xff09;在车辆中相互通信&#xff0c;协调各个系统的操作&#xff0c;以实现功能的集成和协同工作。 在现代汽车中&#xff0c;综合通信…

提高办案效率:公检系统引入自动校对技术

引入自动校对技术到公检系统中可以有效提高办案效率。自动校对技术结合公检系统的特点&#xff0c;可以在以下方面提高办案效率&#xff1a; 1.节省时间&#xff1a;自动校对技术可以快速检测和修正法律文书中的语法、拼写和标点符号等错误。与手动校对相比&#xff0c;自动校对…

dfs+回溯做题笔记

题目链接&#xff1a;t矩阵中的路径_牛客题霸_牛客网 参考代码&#xff1a; import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定&#xff0c;请勿修改&#xff0c;直接返回方法规定的值即可** * param matrix char字符型二维数组 * param …

虹科方案 | 汽车总线协议转换解决方案(二)

上期说到&#xff0c;虹科的PCAN-LIN网关在CAN、LIN总线转换方面有显著的作用&#xff0c;尤其是为BMS电池通信的测试提供了优秀的解决方案。假如您感兴趣&#xff0c;可以点击文末相关链接进行回顾&#xff01; 而今天&#xff0c;虹科将继续给大家带来Router系列在各个领域的…

个推消息推送专项运营提升方案,基于AIGC实现推送文案智能生成

个推消息推送专项运营提升方案自今年3月份发布以来&#xff0c;已应用于游戏社交、影音资讯、电商购物等多个行业。现个推消息推送专项运营提升方案又实现了推送策略的智能化和推送流程的自动化&#xff0c;助力APP进一步提升消息推送的效率和效果。 丰富推送策略组合&#xf…

Tomcat10.1源码安装与部署

安装JDK 1、下载jdk17 [rootmysql80 ~]# wget https://download.oracle.com/java/17/latest/jdk-17_linux-x64_bin.tar.gz[rootmysql80 ~]# ll -h jdk-17_linux-x64_bin.tar.gz -rw-r--r--. 1 root root 174M Mar 18 03:53 jdk-17_linux-x64_bin.tar.gz2、安装目录[rootmysql8…

第三方电容笔怎么样?apple pencil的平替笔

在当今世界&#xff0c;高科技已经成为推动电子产品迅速发展的重要动力。无论是工作&#xff0c;还是学习&#xff0c;iPad平板都很方便。iPad平板电脑将会和我们的生活联系在一起&#xff0c;不管是现在还是未来。iPad配上一支简单的电容笔&#xff0c;不仅提高了工作效率&…

数据库管理-第九十七期 以一当十的数据库路线(20230810)

第九十七期 以一当十的数据库路线&#xff08;20230810&#xff09; 距离上一期已经过去了整整9天了&#xff0c;相较于前几个月的“生产队的驴”&#xff0c;确实慢了很多&#xff0c;归根结底有几点&#xff1a;一是19c OCM的相关内容暂时告一段落&#xff0c;少了一半内容&…

从NPM注册中心获取包

目录 1、搜索和选择要下载的包 1.1 为什么使用 1.2 工作原理 1、质量 2、维护 3、受欢迎程度 4、名气 1.1、开始搜索包 2、在本地安装下载和安装软件包 2.1 安装未限定作用域的包 2.2 安装有作用域的公共包 2.3 安装私有包 2.4 测试包安装 2.5 已安装的软件包版本…