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


目录
相关文章
|
JSON 数据格式
Feign调用文件下载服务接口实例
Feign调用文件下载服务接口实例
1240 0
Feign调用文件下载服务接口实例
|
3月前
|
数据采集
深度解析CancellationToken在HttpClient请求中的应用
本文讨论了在.NET环境中使用HttpClient进行爬虫开发时,如何应用CancellationToken来控制请求的生命周期,提高爬虫的效率和稳定性。通过结合爬虫代理IP技术、多线程请求、设置User-Agent和Cookie等策略,可以增强爬虫的灵活性并降低被网站封禁的风险。文章提供了一个使用CancellationToken和代理IP的多线程爬虫实现示例代码,并详细解析了代码的关键部分,包括CancellationToken的使用、代理IP的配置、并发请求的实现以及User-Agent和Cookie的设置。
深度解析CancellationToken在HttpClient请求中的应用
|
5月前
|
存储 监控 Serverless
函数计算操作报错合集之实例请求Header里面带 "xweb_xhr: 1" 就出现超时,该如何解决
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
Java API Spring
【异常】Feign 调用api模块直接进入fallback的问题解决办法
【异常】Feign 调用api模块直接进入fallback的问题解决办法
338 0
|
6月前
|
测试技术 Serverless iOS开发
PTS接口问题之执行请求失败如何解决
PTS(Performance Testing Service)是一项面向网站、应用等提供的压力测试服务,用于模拟不同场景下的用户访问,评估系统的性能表现;在进行PTS压测时,可能会出现一些异常或报错,本合集将PTS压测中频繁出现的问题及其解决办法进行汇编,旨在帮助用户更有效地进行性能测试和问题定位。
|
小程序 安全 API
.NET企业微信回调配置(数据回调URL和指令回调URL验证)(一)
.NET企业微信回调配置(数据回调URL和指令回调URL验证)
957 0
.NET企业微信回调配置(数据回调URL和指令回调URL验证)(一)
|
应用服务中间件 Go nginx
排查go开发的HttpClient读取Body超时
记一次go httpclient [读取响应Body超时]的排查过程。 今年度解锁的第一个技能
排查go开发的HttpClient读取Body超时
|
存储 JSON Dart
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
446 0
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(一)
|
Dart
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)
286 0
【Flutter】HTTP 网络操作 ( 引入 http 插件 | 测试网站 | Get 请求 | Post 请求 | 将响应结果转为 Dart 对象 | Future 异步调用 )(二)
|
网络协议 Java 测试技术
一场HttpClient调用未关闭流引发的问题
一场HttpClient调用未关闭流引发的问题
一场HttpClient调用未关闭流引发的问题