该类org.apache.http.pool.AbstractConnPool有这个地图字段:</p>
private final Map<T, RouteSpecificPool<T, C, E>> routeToPool;
如果我使用很多代理ip,地图大小会越来越大,这会导致oom。
如何解决?
该类org.apache.http.pool.AbstractConnPool有这个地图字段:</p>
private final Map<T, RouteSpecificPool<T, C, E>> routeToPool;
如果我使用很多代理ip,地图大小会越来越大,这会导致oom。
如何解决?
老实说,我在使用 Apache HTP 客户端时从来没有遇到过这个问题。查看您在Httpclient out of memory的内存转储,我看到“ 104655 instances of class org.apache.http.pool.AbstractConnPool$1”这是一个匿名内部实现,RouteSpecificPool它是您提到的字段的值类型。
那么问题来了,你如何使用客户端呢?必须在某个时候释放连接,并且将清理未使用和/或过期的连接。
不要永远在池中保持连接或为不再使用的连接保持活动状态!这些事情与对高度多样化目标(又名路线)的请求相结合。您必须为使用配置超时(另请参阅Apache Httpclient Connection not Released)!
Apache Http 客户端是一个伟大且广泛使用的工具。但是由于它涵盖了非常广泛的选项,因此使用起来可能会有点笨重,需要了解它的内部工作原理才能有效地使用它。这是鲜为人知但更简单的 Http 客户端实现。它适合简单的使用,并且强烈依赖于浏览器对 HTTP 连接池的优化,因此它不管理自己的池,因此使用起来更加简单。这个 Http 客户端是名为 MgntUtils(由我编写)的开源 Java 库的一部分。这是HttpClient的 JavaDoc 。该库可以在此处作为 Maven 工件或在Github(包括源代码和 JavaDoc)上获得