Java HttpClient类AbstractConnPool太大,如何解决?;

Java HttpClient类AbstractConnPool太大,如何解决?;,java,httpclient,Java,Httpclient,该类具有以下映射字段: private final Map<T, RouteSpecificPool<T, C, E>> routeToPool; 专用最终地图路由池; 如果我使用大量的代理ip,地图的大小将变得越来越大,这将导致oom 如何解决这个问题?老实说,我在使用Apache HTP客户端时从未遇到过这个问题。查看您的内存转储,我看到“104655类org.apache.http.pool.AbstractConnPool$1的实例”,这是您提到的字段的值类型

该类具有以下映射字段:

private final Map<T, RouteSpecificPool<T, C, E>> routeToPool;
专用最终地图路由池;
如果我使用大量的代理ip,地图的大小将变得越来越大,这将导致oom


如何解决这个问题?

老实说,我在使用Apache HTP客户端时从未遇到过这个问题。查看您的内存转储,我看到“
104655类org.apache.http.pool.AbstractConnPool$1的实例”
,这是您提到的字段的值类型
RouteSpecificPool
的另一个非内部实现

所以问题是,如何使用客户端?必须在某个时候释放连接,并清理未使用和/或过期的连接


永远不要在池中保留连接,或者对不再使用的连接执行“保持活动”操作!这些东西与对高度多样化目标(也称为路由)的请求相结合。您必须为使用配置超时(另请参见)

apachehttp客户端是一个伟大且广泛使用的工具。但由于它涵盖了非常广泛的选项,使用起来可能会有点笨重,因此需要了解它的内部工作原理,以便有效地使用它。这是一个鲜为人知但简单得多的Http客户端实现。它适合简单的使用,并且强烈依赖于浏览器对HTTP连接池的优化,因此它不管理自己的池,因此使用起来更简单。这个Http客户机是名为MgntUtils(由我编写)的开源java库的一部分。这里是JavaDoc。该库可以作为Maven工件或在Github上获得(包括源代码和JavaDoc)

似乎这是再次询问的结果,没有进一步的信息不会得到答案…谢谢,你提到的问题是我的,我已经解决了。因为我使用了很多代理IP,这些IP与目标地址一起参与哈希值的计算,导致routeToPool越来越大。HttpClientConnectionManager的closeExpiredConnections()和closeIdleConnections()方法可以释放routeToPool字段中未使用的连接。但我必须定期调用它们。