【问题标题】:SOLR4/lucene and JVM memory managementSOLR4/lucene 和 JVM 内存管理
【发布时间】:2013-03-23 11:48:39
【问题描述】:

有人知道 solr4/lucene 和 JVM 是如何管理内存的吗?

我们有以下案例。

我们有一个 15GB 的服务器,只运行 SOLR4/Lucene 和 JVM(无自定义代码)

我们分配了 2GB 的内存,而 JVM 使用了 1.9MB。在某个时候发生了一些事情,我们的内存不足。

然后我们将 JVM 内存增加到 4GB,我们看到逐渐地,JVM 开始尽可能多地使用它。它现在正在使用分配的 4GB 中的 3GB。

这是正常的 JVM 内存使用情况吗?即 JVM 是否总是尽可能多地使用分配的空间?

感谢您的帮助

【问题讨论】:

  • 有几个原因可能会导致 SOLR 到 OOM。你使用刻面吗?您还启用了哪些其他缓存?您正在使用的目录实现是什么?标准?MMap?NIO?
  • 嗨@lexk,我们确实使用构面。在我们的 solrconfig.xml 中启用的缓存是 filterCache。 fieldValueCache 和 DocumentCache。我们没有启用 queryResultCache。我们的 filterCache 大小是 16384,我们的 documentCache 是 2048,fieldValueCache 是 4096。我们在 solrconfig.xml 中没有目录实现指令,所以我想我们使用标准实现。索引的文档总数为 8M 文档,大小接近 20GB。希望这有助于您提供一些见解。

标签: solr lucene jvm solr4


【解决方案1】:

构面正在使用字段缓存。如果您有很多用于分面的字段(甚至很小),很可能最终您会达到内存限制。

如果您有很多查询方面或定义了很多 FQ - 在您的情况下,每个过滤器缓存条目分配 1Mb。您已将 16384 定义为上限,因此您最终也可能会在此处达到较大的数字。

希望这会有所帮助。

【讨论】: