【问题标题】:Improving Solr performance提高 Solr 性能
【发布时间】:2011-01-07 08:44:57
【问题描述】:

我已经部署了一个 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 毫秒 3 个同时查询:5781、6219、6219 毫秒 4 个同时查询:6484、7203、7719、7781 毫秒...

使用 JConsole 监控服务器 java 进程我检查了堆内存和 CPU 使用量没有达到上限,因此服务器不应该过载。谁能给我一个方法,说明我应该如何调整实例,使其不那么依赖于同时查询的数量?

提前致谢

【问题讨论】:

  • 有点不清楚你是指启动成本,还是你看到的问题一直存在
  • 您的多核设置是否正确? stackoverflow.com/questions/2714046/…
  • 这个问题是一致的,并且变得非常令人头疼,因为响应时间完全取决于同时搜索的客户数量。考虑到我一直在为索引和搜索数据运行批处理,因此设置是正确的。问题是查询结果的性能...
  • 这些数字看起来与在单线程中运行的大部分查询非常一致。你能检查一下 iotop 看看你的磁盘有多少被锤击了吗?这可能是一个缓存垃圾问题(解决方案将是更多内存)
  • 这是stackoverflow.com/questions/4431620/… 的“颠簸”(或者说是重复的)?

标签: lucene solr performance jetty


【解决方案1】:

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

根据您看到的响应时间,感觉您的磁盘一定是瓶颈。为每个分片加载足够的内存来保存完整索引(每个 20GB?)可能会更便宜。您可以使用 sysstat 包中的“sar”实用程序查看磁盘访问。如果您在搜索过程中始终获得超过 30% 的磁盘利用率,则表明您需要添加一些内存并让操作系统缓存索引。

您是否已经有一段时间没有运行优化了?查找时间长的部分原因可能是磁盘上散布着大量碎片化的索引。

【讨论】:

    【解决方案2】:

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

    购买 Intel X25 G2(NewEgg 售价 409 美元,160GB)或基于 SandForce 的新 SSD 之一。将现有的 100GB 索引放在上面,看看会发生什么。那是半天的工作,上衣。如果它爆炸,请为您的工作站清理驱动器。您会对它为您带来的性能提升感到非常满意。

    【讨论】:

    • 感谢您的想法。这很有趣,但该系统在云中运行。不过,我会在未来的项目中考虑到这一点。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    • 1970-01-01
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 2013-02-12
    • 2021-12-18
    相关资源
    最近更新 更多