2012-03-27 52 views
9

我们在Windows 2008 R2上运行的Solr 3.4实例与Oracle Java 6 Hotspot JDK无法响应。当我们看着机器时,我们注意到可用的物理内存变为零。Solr使用太多内存

Tomcat7.exe进程正在使用~70Gigs(专用工作集),但工作集(内存)正在使用系统上的所有内存。 Tomcat/Solr日志中没有错误。我们使用VMMap来识别内存是否用于内存映射Solr segement文件。

重新启动Tomcat暂时解决了问题,但最终还是回来了。

然后,我们尝试减少JVM的大小,为内存映射文件提供更多空间,但随后Solr最终变得对100%的旧版本无响应。再次重置可以解决问题,但在重置之前它不会抛出内存不足的异常。

当前我们的spidey感告诉我们,当存在内存压力时缓存不会缩小,并且可能有太多的MappedByteBuffers挂起,以致操作系统无法从内存映射文件中释放内存。

+0

? – 2012-03-27 18:16:15

+1

好奇你正在使用哪个JVM版本。 6u17及更早版本有几个令人讨厌的JIT和GC问题。 – 2013-03-25 12:18:16

+0

你要索引什么样的数据? – sidgate 2014-04-05 09:42:39

回答

1

有太多的参数和太少的信息,以帮助任何细节。这个答案也是相当古老的,就像所提到的系统一样。

这里有一些事情,在我的经验帮助:

  • 而减少内存使用Tomcat中以及在SOLR减少交换的风险。让系统空间保持呼吸。
  • 如果这个“开始”出现没有任何更改Tomcat或SOLR配置 - 可能是因为SOLR必须索引和查询的数据量增加。这可能意味着原始配置从来没有好过,或者说当前资源的限制已经达到并且必须被审查。哪一个?
  • 检查查询(如果您可以影响它们):将通常请求的任何子查询构造移入过滤器查询中,将非常单个的请求构造移动到常规查询参数中。减少查询缓存,增加/保留过滤器查询缓存 - 或者减少过滤器缓存,以防过滤器查询在系统中不被使用。
  • 检查配置错误的SOLR schema.xml(可能只是误解)。我遇到过这种情况:导入字段将被全部创建,导致RAM溢出。
  • 如果它在导入过程中发生:请检查导入过程是否设置为自动提交并经常提交,并且也会进行优化 - 也许可以不经常提交并且最后只优化一次。
  • 您是否正在对提卡/ Solr的细胞内容提取或使用某种类型的查询排序升级的Java,Tomcat和SOLR