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();
相关推荐
84487600 2020-08-16
似水流年梦 2020-08-09
knightwatch 2020-07-26
fengchao000 2020-06-16
标题无所谓 2020-06-14
yanghui0 2020-06-09
yanghui0 2020-06-09
创建一个 HttpClient 实例,这个实例需要调用 Dispose 方法释放资源,这里使用了 using 语句。接着调用 GetAsync,给它传递要调用的方法的地址,向服务器发送 Get 请求。
wanghongsha 2020-06-04
jiaguoquan00 2020-05-26
zhaolisha 2020-05-16
wanghongsha 2020-05-05
wanghongsha 2020-04-14
knightwatch 2020-04-11
hygbuaa 2020-03-27
zergxixi 2020-03-24
stoneechogx 2020-02-13