liuxinglanyue 发表于 2013-2-7 00:16:30

httpclient的并发连接问题

转自:kafka0102

<span style="font-family: 'Trebuchet MS', verdana, arial, 'Times New Roman', serif; font-size: 13px; line-height: 20px;">昨天的搜索系统又出状况了,几个库同时重建索引变得死慢。经过一个上午的复现分析,确定问题出现httpclient的使用上(我使用的是3.1这个被广泛使用的遗留版本)。搜索系统在重建索引时,是并发多个线程(默认是8个)不停的从PHP客户端取数据(当然,从另一个角度来说,搜索系统是客户端,PHP端是服务端),取回后放到一个队列里由单独的一个或多个线程更新索引。在测试环境复现发现,对于一个请求,PHP端打印耗时是1-2秒,但搜索端打印在4-6秒。这种耗时差别也就两种可能性,一个是PHP端返回到搜索端接受完耗时太长,另一个就是搜索端在真正发给PHP端数据前等待了很久。因为有了之前的jetty7的困顿,起初我怀疑是传输数据的问题。因为请求数据的代码部分我只是简单的使用了httpclient,所以只能从httpclient着手分析。我想到把PHP端和搜索端的请求起始和结束时间都打出来对照一下,不过在这样做之前我把搜索端的并发请求线程数调到了1,看下单线程情况下效果如何,结果惊奇地发现PHP端和搜索端的耗时相近。所以,可以确定,是httpclient的并发连接处理上可能存在问题。不消说,翻开httpclient API中和配置相关的接口,结果找到HttpConnectionManagerParams类中下面两个函数:
<div class="wp_syntax" style="color: #110000; background-color: #f9f9f9; margin-top: 0px; margin-right: 0px; margin-bottom: 1.5em; margin-left: 0px; width: 760px; border: 1px solid silver;"><div class="code" style="vertical-align: top; padding-top: 2px; padding-right: 4px; padding-bottom: 2px; padding-left: 4px;">public void setDefaultMaxConnectionsPerHost(int maxHostConnections);public void setMaxTotalConnections(int maxTotalConnections);
页: [1]
查看完整版本: httpclient的并发连接问题