Spring Boot 3.3升级至3.4后出现Too many open files问题求排查方向
Spring Boot 3.4.x升级后"too many open files"问题的可能原因方向
Apache HttpClient 5版本间的连接池行为变更
HttpClient 5.3.1到5.4.4的迭代中,可能调整了连接池的默认参数或回收策略:- 空闲连接超时、连接存活时间的默认值被延长,导致空闲连接长期占用socket未被清理;
- 连接池最大连接数、单路由最大连接数的默认值降低,同时连接复用逻辑变更,新请求不断创建新连接,旧连接无法被复用或回收。
RestTemplate与HttpClient整合的自动配置变化
Spring Boot 3.4.x对RestTemplate的自动配置可能有调整:- 默认的
PoolingHttpClientConnectionManager初始化逻辑变更,未正确启动连接池的空闲连接清理线程,导致空闲连接堆积; - 新版本不再自动为RestTemplate配置连接池的关闭钩子,应用运行过程中连接池无法主动回收闲置连接。
- 默认的
请求处理逻辑的隐性兼容性问题
虽然请求代码逻辑未变,但新版本HttpClient对连接释放的触发条件有变化:- 在某些异常场景(如请求超时、响应体解析失败)下,连接未被正确归还到连接池,直接泄漏;
- 如果存在响应体未被完全读取或显式关闭的情况,新版本HttpClient不再自动释放连接,导致socket长期处于ESTABLISHED状态。
其他组件升级引发的连锁问题
Spring Boot 3.4.x升级会带动一系列依赖组件版本更新:- 嵌入式Tomcat、Jetty等容器的版本升级,可能引入HTTP连接处理的泄漏问题;
- 数据库连接池、消息队列客户端等依赖的新版本,也可能存在文件描述符泄漏,需排查这些组件的连接配置是否正常。
内容的提问来源于stack exchange,提问作者Lukas Stampf
相关产品推荐
相关产品推荐

