Solr使用太多内存

时间:2012-03-27 17:36:50

标签: memory-leaks solr jvm mmap

我们在Windows 2008 R2上运行的Solr 3.4实例与Oracle Java 6 Hotspot JDK无响应。当我们查看机器时,我们发现可用的物理内存为零。

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

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

然后我们尝试减少JVM大小以为内存映射文件提供更多空间,但随后Solr最终对100%的旧代没有响应。再次重置修复了问题,但在重置之前它没有抛出内存不足的异常。

目前我们的蜘蛛侠意识告诉我们,当存在内存压力时缓存不会缩小,并且可能有太多MappedByteBuffers闲置,因此操作系统无法从内存映射文件中释放内存。

2 个答案:

答案 0 :(得分:1)

参数太多,信息太少,无法提供任何细节。这个答案也很老,就像上面提到的系统一样。

以下是一些有助于我的经历的事情:

  • 相当减少Tomcat和SOLR中的RAM使用率,以降低交换风险。让系统空间呼吸。
  • 如果这"开始"在没有对Tomcat或SOLR配置进行任何更改的情况下出现 - 可能是因为SOLR必须索引和查询的数据量增加。这可能意味着原始配置永远不会开始,或者已经达到当前资源的限制并且必须进行审查。这是哪一个?
  • 检查查询(如果可以影响它们):将经常请求的任何子查询构造移动到filterqueries中,将非常单独的请求构造移动到常规查询参数中。减少查询缓存,增加/保留过滤器查询缓存 - 或者减少过滤器缓存,以防过滤器查询在系统中使用得太多。
  • 检查SOLR的schema.xml上的配置错误(可能只是误解)。我曾遇到过这样的问题:虽然导入的字段会集中创建,导致RAM溢出。
  • 如果在导入过程中发生:检查导入过程是否设置为自动提交并经常提交并且还进行优化 - 也许可以减少提交次数并在最后优化一次。
  • 升级Java,Tomcat和SOLR

答案 1 :(得分:0)

这可能是由于SOLR用于目录的新默认策略(它试图将它们映射到RAM或类似的东西)。

阅读本文:
http://grokbase.com/t/lucene/solr-user/11789qq3nm/virtual-memory-usage-increases-beyond-xmx-with-solr-3-3