现象

首先有一个被服务由于内存有限,导致巨卡。导致调用他的服务出现线程阻塞。jstack打印线程池如下所示:

开始排查解决问题

第一步:检查代码看是否超时设置是否正确,因为感觉超时设置正确不可能阻塞。

找到注入client的位置:

发现配置没有任何问题,此时感到了一点点慌张。(内心OS: 难不成HttpClient还有BUG, 讲道理这么成熟的框架不应该啊)

第二步:本着高效的原则,百度一下是否有其他人踩过这样的坑了。

咦,这不和遇到的一样吗? 心想搞定。看我jstack栈阻塞堆栈信息,也是有重试的信息,如下图所示:

那么直接更改我们的client注入代码为如下:

以为到这里故事就结束了,开开心心重新部署一下,就去玩其他的了。

噩梦再次上演:几天后,被调用服务再次出现卡顿,然后调用方又阻塞了,what fuck !

老规矩看堆栈信息:

还是熟悉的配方,一样的错误,阻塞在同一个地方。本着高效的原则,GPT了一下,然并没有什么用,都是一些太泛的思路,这玩意干精细活还是有缺陷:

那这样的话,就苦逼了,只能慢慢的撸他源码了。因为服务器卡顿是偶现,还没法调试。找到构建过程如下:

显然实际执行在InternalHttpClient里面。点进去看一下他的执行过程:

发现我们配置的requestConfig可能并未生效,他可能直接从Request里面取,那这显然有可能在调用方给Request手动配置requestConfig。 找到调用处的代码:

显然确实有可能是这个原因,那有了上次的经验,我们要验证一下。由于服务器卡顿是偶现,我们debug看一下是不是走到这里了:

发现都是-1, 那应该就是这个问题了,Request配置,重新打包部署,问题再也没有复现过。over!

题外话

源码定位问题的过程省略了很多,所以看起来解决问题过程似乎很简单。因为框架代码毕竟那么多,我第一步先是猜想要先定位到他超时判断逻辑的代码在哪里,才能知道为什么不生效。定位了很久才发现框架本身并无相关逻辑,他是构建了一个Socket去请求,在socket中有两个时间,一个是soTimeOut(读流超时时间), 一个是connectTimeOut(连接超时时间)。 其在创建socket的时候需要指定connectTimeOut,然后soTimeOut可在发起请求前设置。 当然这也反应出分析问题不够冷静, 忽略了基本的网络常识,这些成熟的框架,一开始就应该思考是不是配置不正确的问题,究其原因也是对框架不够深入了解,不知道具体的某个请求可能还存在可以配置单独的RequestConfig对象,一味的关注CloseableHttpClient的配置去了。

记录一个HttpClient超时连接配置不生效的问题排查过程的更多相关文章

  1. 【Redis连接超时】记录线上RedisConnectionFailureException异常排查过程

    项目架构: 部分组件如下: SpringCloudAlibaba(Nacos+Gateway+OpenFeign)+SpringBoot2.x+Redis 问题背景: 最近由于用户量增大,在高峰时期, ...

  2. HttpClient设置连接超时时间

    https://www.cnblogs.com/winner-0715/p/7087591.html 使用HttpClient,一般都需要设置连接超时时间和获取数据超时时间.这两个参数很重要,目的是为 ...

  3. 记录一次php连接mssql的配置

    记录一次php连接mssql的配置 在现有php环境中,php连接mssql数据库失败,tsql 连接正常. 确认问题在php环境上. 网上有个同仁总结的很好,https://blog.csdn.ne ...

  4. 踩坑记录:Redis的lettuce连接池不生效

    踩坑记录:Redis的lettuce连接池不生效 一.lettuce客户端 lettuce客户端 Lettuce 和 Jedis 的都是连接Redis Server的客户端程序.Jedis在实现上是直 ...

  5. [转] python 远程主机强迫关闭了一个现有的连接 socket 超时设置 errno 10054

    python socket.error: [Errno 10054] 远程主机强迫关闭了一个现有的连接.问题解决方案: 前几天使用python读取网页.因为对一个网站大量的使用urlopen操作,所以 ...

  6. windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效, Windows Redis requirepass不生效

    windows Redis绑定ip无效,Redis设置密码无效,Windows Redis 配置不生效, Windows Redis requirepass不生效 >>>>&g ...

  7. httpClient 超时时间设置(转)

    尊重博主原创,特贴博客链接.copy下来只怕以后链接失效或删掉. 转自:http://blog.csdn.net/hi_kevin/article/details/32316171 HttpClien ...

  8. hystrix ,feign,ribbon的超时时间配置,以及原理分析

    背景,网上看到很多关于hystrix的配置都是没生效的,如: 一.先看测试环境搭建: order 服务通过feign 的方式调用了product 服务的getProductInfo 接口 //---- ...

  9. Tomcat连接配置

    DBCP连接池配置: <bean class="org.apache.tomcat.jdbc.pool.PoolProperties"> <property na ...

  10. Nginx与Tomcat、Client之间请求的长连接配置不一致问题解决[转]

    http://bert82503.iteye.com/blog/2152613 前些天,线上出现“服务端长连接与客户端短连接引起Nginx的Writing.Active连接数过高问题”,这个是由于“服 ...

随机推荐

  1. 《.NET内存管理宝典 》(Pro .NET Memory Management) 阅读指南 - 第1章

    本章勘误: 暂无,等待细心的你告诉我哦. 本章注解: 第7页图1-4下面的第一段:堆栈从一开始就与计算机编程有着内在的联系,这主要是因为子例程的概念 什么是子例程呢? 一般地认为,子例程是某个主程序的 ...

  2. FastWiki(增强AI对话功能)企业级智能客服功能介绍

    知识库对话功能 什么是知识库对话? 我们需要找到AI的知识能力是有限的他们的知识都截止于他们训练数据的时间,你提问他们更新的数据的时候他们就会出现乱回复.而知识库则是利用Prompt给于AI更多的知识 ...

  3. 用于vivado的TCL脚本创建工程

    用于实现在脚本所在的目录创建工程并初始化工程 点击查看代码 #获取脚本所在的文件 variable My_File [file normalize [info script]] #prj_path_f ...

  4. verilog之function

    verilog之function 1.基本作用 function,就是声明一个函数.与task的区别就是有参数.function的返回值就是函数名(可以设置位宽),输入值任意,均作为输入参数.代码块需 ...

  5. PyCharm专业版延长使用时间【极简】

    关注公众号[靠谱杨阅读人生]回复[py]获取破解包! 准备好最新版本的PyCharm(去官网下载页面上的第一个就可以,我使用的版本如下图所示) 打开软件选择试用,进去之后可以新建一个项目然后把这个压缩 ...

  6. 2023 LGR 非专业级别软件能力认证第一轮(初赛)S组

    计算器.背包.代码都不能带进考场 禁赛三年并全国通报 B选项符合while语句 弱类型编程语言指的是可以进行类型转换,可以参与各种类型变量的运算 \[3\times 60(秒)\times 44.1\ ...

  7. #树状数组#CF461C Appleman and a Sheet of Paper

    题目传送门 分析 可以发现往左翻太多相当于往右翻一点,所以如果翻的位置超过一半那么打一个取反标记再另一边翻转, 用树状数组维护当前厚度,时间复杂度 \(O(n\log^2 n)\) 代码 #inclu ...

  8. OpenHarmony Liteos_A内核之iperf3移植心得

    一.iperf3工作原理 iperf3主要的功能是测试基于特定路径的带宽,在客户端和服务器端建立连接(三次握手)后,客户端发送一定大小的数据报并记下发送的时间,或者客户端在一定的时间内发送数据并记下发 ...

  9. openGauss事务机制中MVCC技术的实现分析

    openGauss 事务机制中 MVCC 技术的实现分析 概述 事务 事务是为用户提供的最核心.最具吸引力的数据库功能之一.简单地说,事务是用户定义的一系列数据库操作(如查询.插入.修改或删除等)的集 ...

  10. 【有奖互动】开发者版本新特性,你期待哪些更新?#HDC.Together2023#

    <hdc.together< span="">>华为开发者大会2023再次启航,将于8月4日~6日在中国松山湖举办,承载万千期待,开启崭新时代.聚焦新版本. ...