[solr ] SolrCluod(Solr 4.0) 查询经常延时10秒返回
hupr
2013-11-02
我们使用Solr4.0搭建了一套搜索引擎,架构很简单:4台SOLR服务器,2个Shard,1个zookeeper.
在开发环境和测试环境都没有问题。 但是部署到生产环境后发现,每天首次查询内容源、或者过几分钟再去查询都会有10秒左右的延迟. 测试发现,在SOLR服务器上查询1个Shard的内容无延迟;只有同时查询多个Shard才会有此问题。 经过几天的排查,发现问题就在查询各分片的内容、合并的地方。 下面代码第4行会卡住等待。 view sourceprint? 01 private ShardResponse take(boolean bailOnError){ 02 while(pending.size()>0){ 03 try{ 04 Future<ShardResponse> future=CompletionService.take(); 05 ...... 06 } 07 ...... 08 } 09 return null; 10 } 调试后发现,take方法在一次查询中会被调用3次,前2次分别到各分片查询内容,最后一次是合并2次查询的结果。 上面提到,如果在1台Solr服务器上查询1个分片的内容,速度很快,无延迟。所以初步分析,应该是第3次调用take方法合并查询结果时有等待。 可是,接下来我该怎么做呢?大神们给点建议啊~~ 谢谢! |