【java】java通过s3访问ceph报错

1.报错信息、背景

工作中起了几个访问ceph的服务pod节点,一段时间后1个节点一直报错Unable to execute HTTP request: Timeout waiting for connection from pool,详细i信息如下图片,有且仅有1个节点报错,其他节点访问正常。看日志内容为链接池满了,初步怀疑是ceph服务端的连接池满了,但是为什么只有1个pod节点报错,其他节点报错??
后续通过查阅s3官网,了解到这个连接池为客户端自己维护的http连接池

2. 解决

2.1. 通过查询s3官网文档

https://docs.aws.amazon.com/zh_cn/sdk-for-java/latest/developer-guide/home.html --中文
https://docs.aws.amazon.com/sdk-for-java/latest/developer-guide/home.html --英文

  1. 第一个图片说明访问ceph是有连接池资源的
  2. 第二个图片说明ceph默认使用的http是apache httpclient,并且连接池指的是本地http连接池,并不是ceph服务端的连接池数量。

2.2. 修改httpclient连接池,验证问题

  1. 通过查看源码,默认连接池设置的是50个,可以修改为1个,方便测试复现问题。software.amazon.awssdk.http.SdkHttpConfigurationOption

  2. 用jmeter多线程测试下载工程,马上会复现同样的报错。
  3. 参考官网,发现是代码中下载附件后未释放流,所以出现连接池占慢的情况,后续加上close方法,则解决。

相关推荐
唐青枫6 分钟前
Java Gradle 实战指南:从 Wrapper、Kotlin DSL 到 Spring Boot 多模块构建
java·kotlin·gradle
带刺的坐椅8 分钟前
Solon TeamAgent 协作协议:从 SEQUENTIAL 流水线到 HIERARCHICAL 主管团队
java·ai·llm·agent·solon
wuqingshun31415917 分钟前
SpringBoot是如何实现自动配置的
java·spring boot·后端
用户0537040314320 分钟前
我的学习记录泛型
java
zhouhui00122 分钟前
AI帮我写了个Spring Boot校验,线上漏掉了这组边界条件
java·spring boot·redis·ai编程
JRedisX29 分钟前
Java从零手写企业级内存数据库
java
萧瑟余晖31 分钟前
JDK 20 新特性详解
java·开发语言
hdsoft_huge33 分钟前
SpringBoot系列17:日志体系Logback配置,日志分割、脱敏、异常堆栈收集规范(生产级落地)
java·spring boot·logback
吃饱了得干活35 分钟前
扫码登录如何实现?从原理到实战
java·spring boot·redis
JRedisX39 分钟前
JRedisX 项目骨架搭建指南 从零开始 — 手把手教你搭
java