启动期间的Solr内存消耗-加载索引?
我的任务是处理Solr安装中的OutOfMemoryError问题。通过使用AggressiveHeap JVM选项,我终于设法让它保持了几分钟以上 我从来没有和Solr一起工作过,所以我有一点感觉 这是我们采取步骤的过程:启动期间的Solr内存消耗-加载索引?,solr,jvm,Solr,Jvm,我的任务是处理Solr安装中的OutOfMemoryError问题。通过使用AggressiveHeap JVM选项,我终于设法让它保持了几分钟以上 我从来没有和Solr一起工作过,所以我有一点感觉 这是我们采取步骤的过程: 启动雄猫 启动增量导入 增量导入启动后,堆消耗将不可避免地增加。我们尝试将Xmx设置为4 Gig,这会导致OutOfMemoryErrors或系统无响应,因此尝试了AggressiveHeap选项,这会导致JVM占用大约5.5 Gig的RAM。正如你在屏幕上看到的,这一次G
(这台机器是物理的,有12 Gig的ram和16个内核。它与另一个大型Tomcat实例共享这台机器。我们正在运行Oracle JDK 1.6 21)有很多东西。一件事是
mergeFactor
,因为它控制生成的段数,并且每个段都有一个段读取器。但是,更改此选项不会立即改变内存使用情况。其他选项主要控制索引进程的RAM使用,而不是启动或搜索期间的RAM使用
第二件事是搜索者变暖。通常,在启动过程中会有一些查询运行到热搜索程序,这些查询会被缓存。还有一些控制缓存大小的选项。另见:
如果遇到内存问题,将termIndexDivisor设置为12显然不是一件好事。据我所知,在4.x中,术语索引除数是256或128,至少在1.x中设置为32。此选项控制将术语的多少条目加载到RAM中。在你的情况下,每12个学期。即使索引已经存在,termIndexDivisor也应该有效
如果索引加载到RAM,则由direcotryfactory配置选项控制
如果您在Solr trunk上工作,可能会错过StandardDirectoryFactory在某些情况下解析为MMAPDirectory的更改,这将导致大量RAM使用(如果您有一个大索引)。这种变化发生在今年4月到现在的某个时候。我甚至不知道这是如何通过代码审查的,但这实际上是主干的当前状态。我最后用调试器进行了一些挖掘,因为即使使用@fyr的建议,内存消耗也没有真正减少多少 事实证明,deltaQuery和deltaImportQuery都是该查询的副本。这意味着查询不是只返回自上次导入以来更改的条目的PKs,而是返回每一行,Solr试图将它们存储在内存中(