上一篇文章讲到solr连接问题分析:
solr1.4 中SearchHandler使用的httpclient在高并发可能出现的问题
现在做一次测试:
tomcat Connector的配置如下:暂时为BIO方式
<Connector port="8080" protocol="HTTP/1.1" maxThreads="20" socket.soTimeout="2000"
connectionTimeout="2000" redirectPort="8443" keepAliveTimeout="2000" enableLookups="false" acceptCount="0" URIEncoding="UTF-8"/>
在tomcat上布置两个solr服务,主要测试solr 上一篇文章提到的SearchHandler里分布搜索的httpclient线程池配置问题。
<requestHandler name="me" class="solr.SearchHandlerExt">
<!-- default values for query parameters -->
<lst name="defaults">
<str name="echoParams">explicit</str>
<str name="shards">localhost:8080/solr,localhost:8080/solr2</str>
<str name="shards.qt">single</str>
<str name="timeAllow"></str>
</lst>
<!-- 分配给某个主机的连接池数量 -->
<int name="maxConnectionsPerHost">2</int>
<!-- 总共的连接数量-->
<int name="maxTotalConnections">10</int>
</requestHandler>
编写了个shell脚本文件 curl_link 运行测试。。接收每一个参数作为循环次数:
index=1
echo $1
while [ $index -le $1 ]
do
dest="http://localhost:8080/solr/select/?q=1*&start=100&rows=100"
echo $dest
curl $dest &
index=$(($index +1))
echo index
done
监控tomcat打出的日志 :tail -f logs/catalina.out|grep -o QTime=.*
a) 运行 sh curl_link 1
QTime=1001 (某子机搜索时间)
QTime=1003 (某子机搜索时)
QTime=2017 (总共时间)
正常情况。。总时间 粗略大于两子机时间之和一眯点
a) 运行 sh curl_link 2
QTime=1002
QTime=1002
QTime=2018
QTime=1002
QTime=1001
QTime=3026
已经有点不正常。。由于httpclient最多只能在同一时间请求同一目标host,后面有阻塞等待了会,直到有请求完成并releaseConnection,有等待多一秒的时间
c)运行 sh curl_link 3
QTime=1003
QTime=1002
QTime=3159
QTime=1001
QTime=1008
QTime=4171
QTime=1002
QTime=1002
QTime=4178
c)运行 sh curl_link 10
QTime=1001
QTime=1001
QTime=2038
QTime=1002
QTime=1009
QTime=3069
QTime=1003
QTime=1001
QTime=5071
QTime=1002
QTime=1002
QTime=6095
QTime=1002
QTime=1002
QTime=7099
QTime=1001
QTime=1003
QTime=7110
QTime=1001
QTime=1002
QTime=9130
QTime=1002
QTime=1003
QTime=10139
QTime=1002
QTime=1001
QTime=11156
QTime=1002
QTime=1002
QTime=11155
c)运行 sh curl_link 20 ----tomcat上设置了最多20条线程
服务直接挂了。。每一条请求又必须再分发请求。这个时候都阻塞死了。。
a) 运行 sh curl_link 2
QTime=1054
QTime=1068
QTime=1144
QTime=1147
QTime=2517
QTime=2509
c)运行 sh curl_link 4
QTime=1002
QTime=1001
QTime=1013
QTime=1002
QTime=2026
QTime=2038
QTime=1002
QTime=1001
QTime=1002
QTime=3047
QTime=1001
QTime=3059
c)运行 sh curl_link 10
QTime=1001
QTime=1016
QTime=1017
QTime=1013
QTime=2069
QTime=2072
QTime=1002
QTime=1002
QTime=1001
QTime=1002
QTime=3115
QTime=3126
QTime=1001
QTime=1001
QTime=4136
QTime=1003
QTime=1004
QTime=4131
QTime=1001
QTime=1002
QTime=5138
QTime=1006
QTime=1004
QTime=5119
QTime=1001
QTime=1002
QTime=6093
QTime=1000
QTime=1002
QTime=6106
从上面的数据可以看出只要将
maxConnectionsPerHost
参数修改大一些,在并发大一些的时候表现更佳。
同样一旦tomcat上的连接数给用完时,服务就会挂掉了。。不管solr里面设置的连接池是多少。。。