httpClient调用失败和配置优化

简介: httpClient调用失败和配置优化

问题描述

利用httpclient调用云平台接口偶发报错:connection timed out,我方的time waited连接较多。

问题分析

  1. 首先排查是否是我方连接池连接数不够,从200调整到500,还是会偶发报错;
  2. 后来发现可能是我方连接后线程没有释放,导致没有复现,所以新增了releaseConnect的方法和读取Entry中的内存方法,有一定效果;
  3. 最后还排查到是否是Linux的TCP连接策略可以优化,将tcp的连接复用改为true;
1. 查询连接处于TIME_WAITED状态的连接:
2. netstat -an | awk '/tcp/ {print $6}' | sort | uniq -c
  1. 最后排查发现是网卡丢包,和现场实施人员确认,最近有扩容过设备,导致连接异常;
  2. 在丢包率较大的时候,通过重写retryHandler方法来对connecttion timed out的excepion进行重试;

解决方案

  1. 读取Entry中所有数据后,主动释放连接,同时开启linux服务器的time_waited状态复用设置;
  2. 针对网卡丢包的问题,实现retryHandler,满足connecttion timed out异常情况下的重试机制;

问题总结

超时设置

connectionTimeout:连接超时,表示的是我端到对端简历 tcp的连接超时

SocketTimeout:读取到时,表示已经连接上了,但是读取对端数据超时

关闭连接的方式:

response.close():关闭连接

method.releaseConnection():释放连接

httpClient.close():关闭连接池

参考资料

  • HTTP 高并发场景下的 TCP 参数优化:https://xujiyou.work/其他/计算机网络/TCP/HTTP高并发场景下的TCP参数优化.html
  • Apache HttpClient两种重试机制实现HttpRequestRetryHandler和ServiceUnavailableRetryStrategy:https://juejin.cn/post/7099646330481410085#heading-9(介绍了如何设置重试处理器和重试策略)
  • HttpClient的使用与连接资源释放:https://juejin.cn/post/7078658461407379463
  • HttpClient 在vivo内销浏览器的高并发实践优化:https://zhuanlan.zhihu.com/p/552220565


目录
相关文章
|
2月前
|
数据采集
深度解析CancellationToken在HttpClient请求中的应用
本文讨论了在.NET环境中使用HttpClient进行爬虫开发时,如何应用CancellationToken来控制请求的生命周期,提高爬虫的效率和稳定性。通过结合爬虫代理IP技术、多线程请求、设置User-Agent和Cookie等策略,可以增强爬虫的灵活性并降低被网站封禁的风险。文章提供了一个使用CancellationToken和代理IP的多线程爬虫实现示例代码,并详细解析了代码的关键部分,包括CancellationToken的使用、代理IP的配置、并发请求的实现以及User-Agent和Cookie的设置。
深度解析CancellationToken在HttpClient请求中的应用
OKHTTP解析之RetryAndFollowUpInterceptor重试机制
OKHTTP解析之RetryAndFollowUpInterceptor重试机制
|
12月前
|
Java API Spring
【异常】Feign 调用api模块直接进入fallback的问题解决办法
【异常】Feign 调用api模块直接进入fallback的问题解决办法
243 0
|
5月前
|
测试技术 Serverless iOS开发
PTS接口问题之执行请求失败如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
|
JavaScript API
让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法
让 Spartacus 服务器端渲染引入 long API 调用超时机制的两种配置方法
|
应用服务中间件 Go nginx
排查go开发的HttpClient读取Body超时
记一次go httpclient [读取响应Body超时]的排查过程。 今年度解锁的第一个技能
排查go开发的HttpClient读取Body超时
|
网络协议 Java 测试技术
一场HttpClient调用未关闭流引发的问题
一场HttpClient调用未关闭流引发的问题
一场HttpClient调用未关闭流引发的问题
|
监控 Java 数据挖掘
使用 SpringAOP 获取一次请求流经方法的调用次数和调用耗时
  引语   作为工程师,不能仅仅满足于实现了现有的功能逻辑,还必须深入认识系统。一次请求,流经了哪些方法,执行了多少次DB操作,访问了多少次文件操作,调用多少次API操作,总共有多少次IO操作,多少CPU操作,各耗时多少 ? 开发者应当知道这些运行时数据,才能对系统的运行有更深入的理解,更好滴提升系统的性能和稳定性。   完成一次订单导出任务,实际上是一个比较复杂的过程:需要访问ES 来查询订单,调用批量API接口 及访问 Hbase 获取订单详情数据,格式化报表字段数据,写入和上传报表文件,更新数据库,上报日志数据等;在大流量导出的情形下,采用批量并发策略,多线程来获取订单详情数据,整
260 0