HttpClient class AbstractConnPool 变得太大了,如何解决?

HttpClient class AbstractConnPool becames too big,how to solve it ?

classorg.apache.http.pool.AbstractConnPool有这个地图字段:

private final Map<T, RouteSpecificPool<T, C, E>> routeToPool;

如果我使用大量的代理ip,地图会越来越大,这会导致oom。

如何解决?

老实说,我在使用 Apache HTP 客户端时从未遇到过这个问题。查看 处的内存转储,我看到“104655 instances of class org.apache.http.pool.AbstractConnPool”,这是 RouteSpecificPool 的匿名内部实现,它是您提到的字段的值类型。

那么问题来了,怎么使用客户端呢?连接 必须在某个时候释放 并且未使用的 and/or 过期连接将被清除。

永远不要在池中永远保持连接,或者为不再使用的连接保持活动状态!这样的事情与对高度多样化的目标(又名路线)的请求相结合。您必须为使用配置超时(另请参阅 )!

Apache Http 客户端是一个伟大且广泛使用的工具。但是由于它涵盖了非常广泛的选项,使用起来可能会有点笨重,需要了解它的内部工作原理才能有效地使用它。这是鲜为人知但更简单的 Http 客户端实现。它适合简单使用,并且强烈依赖于浏览器对 HTTP 连接池的优化,因此它不管理自己的连接池,因此使用起来更加简单。这个 Http 客户端是名为 MgntUtils(由我编写)的开源 java 库的一部分。这是 HttpClient. The library could be obtained as Maven artifact here or on Github (including sources and JavaDoc) here

的 JavaDoc