gpt4 book ai didi

Java 堆空间崩溃 Solr 查询

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:51:17 25 4
gpt4 key购买 nike

我不是 Java 的人,但使用 Solr 进行搜索,但是在搜索这个问题后我找不到它发生的原因。

我有一个 3000 万条记录的索引,没有排序和我能做的最轻的设置,但在几次查询后我有以下异常:

SEVERE: java.lang.OutOfMemoryError: Java heap space at org.apache.lucene.index.SegmentReader.createFakeNorms(SegmentReader.java:1117) at org.apache.lucene.index.SegmentReader.fakeNorms(SegmentReader.java:1125) at org.apache.lucene.index.SegmentReader.norms(SegmentReader.java:1140) at org.apache.solr.search.SolrIndexReader.norms(SolrIndexReader.java:282) at org.apache.lucene.search.TermQuery$TermWeight.scorer(TermQuery.java:72) at org.apache.lucene.search.IndexSearcher.search(IndexSearcher.java:250) at org.apache.lucene.search.Searcher.search(Searcher.java:171) at org.apache.solr.search.SolrIndexSearcher.getDocListNC(SolrIndexSearcher.java:988) at org.apache.solr.search.SolrIndexSearcher.getDocListC(SolrIndexSearcher.java:884) at org.apache.solr.search.SolrIndexSearcher.search(SolrIndexSearcher.java:341) at org.apache.solr.handler.component.QueryComponent.process(QueryComponent.java:182) at org.apache.solr.handler.component.SearchHandler.handleRequestBody(SearchHandler.java:195) at org.apache.solr.handler.RequestHandlerBase.handleRequest(RequestHandlerBase.java:131) at org.apache.solr.core.SolrCore.execute(SolrCore.java:1317) at org.apache.solr.servlet.SolrDispatchFilter.execute(SolrDispatchFilter.java:338) at org.apache.solr.servlet.SolrDispatchFilter.doFilter(SolrDispatchFilter.java:241) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:679)

然后我重新启动 tomcat,它会恢复工作,直到出现一些再次下降的请求。

我没有排序(即使我希望如此),大多数时候搜索操作系统都是通过特定的索引字段(不是所有字段)。

你能帮帮我吗?提前致谢:)

最佳答案

对于具有几百万条记录的 Solr 部署,128 MB 似乎很低。您确实可以使用 -Xmx 增加 JVM 的最大大小. -XX:MinHeapFreeRatio只是更改调整堆大小的点,但您也可以使用 -Xms-Xmx 具有相同的值直接分配最大大小并避免任何调整大小。

但是,您可能想尝试为堆确定一个更精确的值,而不是盲目地投入更多内存,因为过多的内存可能会适得其反,因为垃圾收集期间的停顿时间较长。使用 JVisualVM(使用 VisualGC 插件更好)或 jstat在命令行上,您可以看到 Solr 在启动后使用了多少内存,在请求后使用了多少内存,以及在您的典型使用过程中它的堆通常如何变化。

例如,使用 jstat -gcutil <PID> ,你可以看到 JVM 的年轻代(E,如伊甸园)和老年代(O)有多满(老年代是你首先应该看的)。或者使用 jstat -gc <PID> ,您将获得值而不是百分比(C 列是容量,即最大值,U 列是实际使用情况)。您需要足够的内存用于 Solr 的工作集以及处理请求所需的内存。使用该信息,您可以更精细地调整所需的内容。

关于Java 堆空间崩溃 Solr 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12461123/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com