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
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