我正在从solr 6.6迁移到solr 7.7。使用与solr 6.6相同的配置运行相同的查询和数据集,solr 7.7因GC问题而崩溃。我尝试拍摄堆快照,它看起来像这样
num #instances #bytes class name (module)
-------------------------------------------------------
1: 96550804 2456456648 [B (java.base@11.0.5)
2: 96197629 2308743096 org.apache.lucene.util.BytesRef
3: 96139148 2307339552 org.apache.lucene.index.Term
4: 1839819 440114232 [I (java.base@11.0.5)
5: 1800360 417537648 [Lorg.apache.lucene.index.Term;
6: 1799767 57592544 org.apache.lucene.search.PhraseQuery
7: 1803933 43294392 org.apache.lucene.search.BooleanClause
8: 1376256 33030144 org.apache.solr.update.VersionBucket
9: 137210 32160648 [C (java.base@11.0.5)
10: 36817 16598560 [J (java.base@11.0.5)
11: 43901 11346568 [Ljava.lang.Object; (java.base@11.0.5)
12: 290325 6967800 java.lang.String (java.base@11.0.5)
来自GC分析,旧GC达到峰值,触发完整GC,这需要很长时间,并触发STW事件暂停所有solr操作。
这可能是什么原因呢?
仔细检查您发送给solr的查询,如果它们包含rows
计数到非常高的值。尝试在请求中将rows
计数限制为最大10,000,以获得更快的GC,这是我个人认为更安全的方法。如果需要,使用分页来提取大量的文档。如果您的查询结果只有几百个也没关系,如果您在请求中使用非常大的rows
参数值,则会增加GC时间。
如果不是这种情况,您应该调整您的GC设置。