今天我也遇到这个情况了。
转载:大并发下Timeout waiting for connection from pool 解决方案
但是我是FLink下遇到的,在processfuntion下open方法中初始化了客户端,但是调用的时候报错了。
这是因为HttpClient在并发量高的时候 , 可能会出现连接池不够用的情况 .
解决方案如下 :
// 总连接数 值不应该过大 默认20
pollingConnectionManager.setMaxTotal(200);
// 同路由的并发数 , 默认值2 . 限制数量实际使用DefaultMaxPerRoute并非MaxTotal。
// 设置过小无法支持大并发(ConnectionPoolTimeoutException: Timeout waiting for connection from pool)
pollingConnectionManager.setDefaultMaxPerRoute(200);
maxConnTotal 和 maxConnPerRoute 的区别 ?
maxConnPerRoute * 路由数量
不会大于 maxConnTotal
比如maxConnTotal=200 , maxConnPerRoute=100 , 那么如果只有一个路由的话 , 那么最大连接数也就是100了;
如果有两个路由的话 , 那么它们分别最大的连接数是100 , 总数不能超过200
这里我有个疑问,我的是open方法创建的对象,应该是每个并行度是一个对象互不干扰,每个并行度我是只会调用一次获取远程信息,怎么就不够用呢?我设置的是20
// 总连接数 值不应该过大 默认20
pollingConnectionManager.setMaxTotal(20);
// 同路由的并发数 , 默认值2 . 限制数量实际使用DefaultMaxPerRoute并非MaxTotal。
// 设置过小无法支持大并发(ConnectionPoolTimeoutException: Timeout waiting for connection from pool)
pollingConnectionManager.setDefaultMaxPerRoute(20);
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://blog.csdn.net/qq_21383435/article/details/123512695
内容来源于网络,如有侵权,请联系作者删除!