首页 > 其他分享 >记录一个HttpClient超时连接配置不生效的问题排查过程

记录一个HttpClient超时连接配置不生效的问题排查过程

时间:2024-04-26 09:23:23浏览次数:16  
标签:调用 框架 代码 配置 阻塞 排查 超时 HttpClient

现象

首先有一个被服务由于内存有限,导致巨卡。导致调用他的服务出现线程阻塞。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
From: https://www.cnblogs.com/enjoyall/p/18159220

相关文章

  • JAVA程序连接es(Elasticsearch)会出现长时间不请求,突然请求会连接超时的问题
       可以使用这个方法试试设置长时间保持策略 伪代码 /***配置长连接保持策略**@return*/publicConnectionKeepAliveStrategyconnectionKeepAliveStrategy(){return(response,context)->{//Honor'keep......
  • 02、Linux 排查
    Linux分析排查1.敏感文件信息1.1.tmp目录/tmp:临时目录文件,每个用户都可以对它进行读写操作。因此一个普通用户可以对/tmp目录执行读写操作(ls-alt)筛查/tmp目录下是否存在相关的恶意文件等1.2.开机启动:/etc/init.d恶意代码很可能设置在开机自启动的位置查看指定目录下......
  • 01、Windows 排查
    Windows分析排查分析排查是指对Windows系统中的文件、进程、系统信息、日志记录等进行检测,挖掘Windows系统中是否具有异常情况1.开机启动项检查一般情况下,各种木马、病毒等恶意程序,都会在计算机开机启动过程中自启动查看开机启动项:1.利用操作系统中的启动菜单(注意有的......
  • HttpClient 爬去网络数据
    创建HttpHelper类publicclassHttpHelper{publicstaticHttpClientClient{get;}=newHttpClient();///get请求url请求地址publicstaticasyncTask<string>GetHTMLByURLAsync(stringurl,stringname=""){using(HttpClientclient=......
  • 记一次new ArrayList导致的cpu飙升问题排查
    参考:https://mp.weixin.qq.com/s/8JDPOAvmKYP8JZxau45hdw前言当时场景正常的jvm监控曲线图产生问题的jvm监控曲线图具体分析结束语昨天线上容器突然cpu飙升,也是第一次排查这种问题所以记录一下~前言首先问题是这样的,周五正在写文档,突然收到了线上报警,发......
  • 流水线运行出错排查难?AI 来帮你
    “我的企业有几千条流水线,每次流水线运行出错,都要投入不少的技术人员进去排查,需要花费不少的时间。”遇到这种情况,怎么解决。在AI爆火的今天,AI如何助力DevOps效率提升?云效与阿里云通义大模型合作,推出了流水线智能排查能力。以Java构建为例,当流水线在构建环节出现错误时,......
  • 流水线运行出错排查难?AI 来帮你
    “我的企业有几千条流水线,每次流水线运行出错,都要投入不少的技术人员进去排查,需要花费不少的时间。”遇到这种情况,怎么解决。在AI爆火的今天,AI如何助力DevOps效率提升?云效与阿里云通义大模型合作,推出了流水线智能排查能力。以Java构建为例,当流水线在构建环节出现错误时,......
  • 超时异常
    org.springframework.web.client.ResourceAccessExceptionI/OerroronPOSTrequestfor"http://xxxxx/yyyy":ReadtimedoutrestClient主动设置的超时时间或者服务器设置的超时时间到了,都会返回ResourceAccessExceptionprivateResponseEntity<String>call(JSONObject......
  • 下级平台级联EasyCVR视频汇聚平台后,设备显示层级并存在重复的原因排查
    视频汇聚平台/视频监控系统/国标GB28181协议EasyCVR安防平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力,平台支持7*24小时实时高清视频监控,能同时播放多路监控视频流,视频画面1......
  • 运行TMOS系统的MCU复位/死机问题排查
    目录TMOS是沁恒自主产权的轻量级操作系统,。如果用户在使用TMOS系统时,出现复位问题,最常见原因是应用层代码的ram越界访问、操作flash没有4字节对齐。其他复位问题,可以参考下方博客,利用定时器中断、看门狗中断和硬件错误中断来定位复位前PC指针指向哪里:CH582CH592CH573PC指针......