具有柱塞尺寸变化的solr性能

时间:2015-03-25 20:17:23

标签: linux search solr ram query-performance

根据这篇文章,linux机器最好在索引大小方面拥有1.5倍的RAM。因此,为了验证这一点,我尝试在不同的RAM分配量中测试solr性能,保持其他配置(即固态驱动器,8核处理器,64位)在两种情况下都相同。

https://wiki.apache.org/solr/SolrPerformanceProblems

1)最初,linux机器有32 GB RAm,其中我分配了14GB到solr。

export CATALINA_OPTS =“ - Xms2048m -Xmx14336m -XX:+ UseConcMarkSweepGC -XX:+ PrintGCApplicationStoppedTime -XX:+ PrintGCDetails -XX:+ PrintGCTimeStamps -Xloggc:./ logs / info_error / tomcat_gcdetails.log”

1000个查询的平均搜索时间为300毫秒。

2)之后,RAM增加到68 GB,其中我为Solr分配了40GB。现在,奇怪的是,同一组查询的平均搜索时间是3000毫秒。

现在,在此之后,我在68GB机器上将solr分配的内存减少到了25GB。但是,与第一种情况相比,搜索时间仍然更长。

我缺少什么。请建议

1 个答案:

答案 0 :(得分:2)

在我看来,你使用的Java堆太大了。

RAM对于Solr非常重要,但主要是将索引文件保留在Java堆空间之外的内存中。

Solr默认使用" MMapDirectory"它将索引文件加载到OS磁盘缓存中,然后将其映射到Solr进程的虚拟内存中。重要的是,这发生在Java堆空间之外。

您在声明的文档中也说了这一点:

  

Solr性能的主要驱动因素是RAM。索尔要求   两个独立的东西有足够的内存:一个是Java堆,即   其他是"免费"操作系统磁盘缓存的内存。

...

  

对于索引更新,Solr依赖于快速批量读取和写入。对于   搜索,快速随机读取是必不可少的。满足这些的最好方法   要求是确保有大型磁盘缓存可用。

要更好地理解这一点http://blog.thetaphi.de/2012/07/use-lucenes-mmapdirectory-on-64bit.html

那么Java堆空间应该有多大?我将从2 GB开始,然后查看GC日志

  

这是其中一个没有通用答案的问题。你想要一个   堆得足够大,以便你没有OutOfMemory(OOM)   持续垃圾收集的错误和问题,但足够小   你不会浪费内存或遇到巨大的垃圾收集   暂停。长版本:您必须进行实验。