我有一个solr云实例版本4.8.1,包含8个节点,4个分片和JVM上面临的内存泄漏
以下是该实例的详细信息。
当用户开始在solr中搜索(大约50个并发用户)并且并非总是如此但堆通常不断增长并且GC周期没有清理堆。我看到GC运行了将近100,000毫秒仍然没有清理堆。肯定会发生内存泄漏。
看看当JVM堆大小达到99.9%时所采取的堆转储,我看到org.apache.lucene.search.FieldCacheImpl占用了大量内存7.13 GB(7.5 GB堆中),它有一个浅的大小只有32字节,但引用了很多HashMap和WeakHashMap对象,看起来像是一个单例,但找不到它为什么这样做的原因。 在此发布以查明是否有人因为大量数据的solr云而面临内存泄漏,以及是否可以通过配置更改进行修复。
答案 0 :(得分:0)
事实证明,lucene字段缓存将用于排序和分面操作,如果排序是强制用例,那么解决方案是定义具有docValue(如下所示)属性的字段,用于排序数据。
<field name="test_field" type="string" indexed="false" stored="false" docValues="true" />
文本字段和标记化器不支持docValues,因此在这种情况下,我定义了一个类型为solr.StrField
的新字段,并将其用于排序操作。
这消除了高速缓存和Java堆内存的使用,而不必牺牲任何功能。