提高Solr性能

时间:2011-01-07 08:44:58

标签: lucene solr performance jetty

我已部署了5个分片的基础架构,其中:     shard1有3124422个文档     shard2有920414个文档     shard3有602772个文档     shard4有2083492个文档     shard5有11915639个文档     索引总大小:100GB

操作系统是Linux x86_64(Fedora版本8),vMem等于7872420,我使用Jetty(来自Solr示例下载)运行服务器:     java -Xmx3024M -Dsolr.solr.home = multicore -jar start.jar

查询的响应时间约为2-3秒。然而,如果我同时执行多个查询,性能会立即下降:     1个同时查询:2516ms     2个同时查询:4250,4469 ms     3个同时查询:5781,6219,6219 ms     4个同时查询:6484,7203,7719,7781 ms ...

使用JConsole监视服务器java进程我检查堆内存和CPU使用率是否达不到上限,因此服务器不应该执行过载。任何人都可以给我一个方法,我应该如何调整实例,因为它几乎不依赖于同时查询的数量?

提前致谢

2 个答案:

答案 0 :(得分:2)

您可能需要考虑为每个分片创建从属设备,以便您可以支持更多的读取(请参阅http://wiki.apache.org/solr/SolrReplication),但是,您获得的性能不是很合理。

根据你所看到的响应时间,感觉你的磁盘必须是瓶颈。你只需加载足够的内存来保存完整的索引(每个20GB?),你可能会更便宜。您可以使用sysstat包中的'sar'实用程序查看磁盘访问。如果您在搜索过程中持续获得超过30%的磁盘利用率,那么这是一个好兆头,您需要添加一些内存并让操作系统缓存索引。

自从你进行优化以来,已经有一段时间了吗?也许长查询时间的一部分是整个盘片上分散的碎片散布的结果。

答案 1 :(得分:2)

正如我在Solr邮件列表中所述,3天前您提出同样的问题,Solr / Lucene从SSD中获益匪浅。虽然在更多机器上进行分片或添加RAM的引导负载可用于I / O,但SSD选项相对便宜且非常简单。

购买英特尔X25 G2(NewEgg售价140美元,160GB)或新推出的基于SandForce的SSD。将现有的100GB索引放在上面,看看会发生什么。这是半天的工作,顶部。如果它炸弹,清除工作站的驱动器。你会对它给你的性能提升感到非常满意。