HttpClient连接数参数解析

节前高峰,被百度导了一波流量过来,qps突然升高了1000+,调用第三方的HttpClient抛异常,获取不到连接,赶紧调整了限流参数,查看连接池参数配置,这个并发数应该可以支持的啊,为什么会崩呢?查看了参数说明,果然,使用了公司提供的默认配置,最大连接数确实不够。之前对连接数参数的理解也是有误的。

对于连接数的配置,我们常用以下三个指标:

  • the total number of connections
  • the maximum number of connections per (any) route
  • the maximum number of connections per a single, specific route

根据api说明:

  • setMaxTotal(int max): Set the maximum number of total open connections.
  • setDefaultMaxPerRoute(int max): Set the maximum number of concurrent connections per route, which is 2 by default.
  • setMaxPerRoute(int max): Set the total number of concurrent connections to a specific route, which is 2 by default.

如下配置:

PoolingHttpClientConnectionManager connManager 
  = new PoolingHttpClientConnectionManager();
connManager.setMaxTotal(200);
connManager.setDefaultMaxPerRoute(50);
HttpHost host = new HttpHost("www.baidu.com", 80);
connManager.setMaxPerRoute(new HttpRoute(host), 30);

以上配置表示,整个连接池的最大连接数是200,默认每个路由的最大连接数是50,对于baidu这个路由最大连接数是30。这里需要注意,对一个特定的host,最大连接数限制真正起作用的是DefaultMaxPerRoute和MaxPerRoute,总连接数不超过MaxTotal。

参考

http://www.baeldung.com/httpclient-connection-management
http://jinnianshilongnian.iteye.com/blog/2089792

如果觉得我的文章对您有用,请在支付宝公益平台找个项目捐点钱。 @sxzhou Feb 7, 2018

奉献爱心