HttpClient报错Timeout waiting for connection from pool
Posted changxy-codest
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HttpClient报错Timeout waiting for connection from pool相关的知识,希望对你有一定的参考价值。
报错现象
线上项目使用HttpClient请求第三方的HTTP资源,并发量高的时候,日志框报Timeout waiting for connection from pool
客户端的现象是有时正常,有时报错
原因分析
网上查找资料,很多照搬某个博客的解决方法,大致是合理的使用EntityUtils.consume及时释放请求连接
这个说法没错,但是这里的问题不是请求连接释放不当导致的
出现这个异常是因为新的请求来的时候,需要到HttpClient的线程池里面获取一个连接,作为请求连接
当请求等待获取连接的时间超过设置的connectionRequestTimeout,就会抛出Timeout waiting for connection from pool异常
解决方法
1. 合理的配置HttpClient的连接池大小
clientBuilder.setMaxConnTotal(maxConnections);
2. 结合业务现状配置连接超时时间
RequestConfig.custom().
setConnectTimeout(connectTimeout).
setSocketTimeout(readTimeout).
.setConnectionRequestTimeout(connectionRequestTimeout).build();
以上是关于HttpClient报错Timeout waiting for connection from pool的主要内容,如果未能解决你的问题,请参考以下文章
HttpClient.Timeout 和使用 WebRequestHandler 超时属性有啥区别?
HttpClient webform 表单请求timeout原因
HttpClient连接池抛出大量ConnectionPoolTimeoutException: Timeout waiting for connection异常排查
apache HttpClient API 中的 setConnectionTimeout 、 setSoTimeout 和“http.connection-manager.timeout”有啥区别