2012-09-17 4 views
3

저는 Java 녀석이 아니지만 Solr을 검색에 사용합니다. 그러나이 문제에 대한 검색을 한 후에 나는 왜 그것이 일어나고 있는지 알 수 없었습니다. Java 힙 공간 충돌 Solr 쿼리

나는 어떤 분류하고 내가 할 수있는 가장 가벼운 설정에 30 백만 기록 - 인덱스를 가지고,하지만 난 몇 쿼리 후 다음과 같은 예외가 있습니다 : 다음

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)

을 나는 바람둥이를 다시 시작하고 도착 몇 차례 다시 떨어질 때까지 일하러 돌아 가야합니다.

나는 (심지어 나는 그것을 원한다) 정렬하고 있지 않으며 특정 인덱스 필드 (대부분이 아닌) 모두를 검색한다.

도와 주시겠습니까? 미리 감사드립니다 :)

+0

가능한 복제본 [Solr/Lucene이 java.lang.OutOfMemoryError로 죽지 않도록하는 방법] (http://stackoverflow.com/questions/2391758/how-to-make-sure-solr-lucene) –

+0

나는 그 주제를보고 그것을 읽었지만, 답변은 주로 FieldCache와 FieldComparator 클래스에서 정렬에 초점을 맞추고 있는데, 그것은 나의 경우가 아니다. 데몬을 시작하기 위해 우분투의 기본 설정을 사용하기 때문에 메모리 제한, 기간 제한 등을 늘리는 가장 좋은 방법은 무엇인지 알아 내려고합니다. 수동으로 수행하고 처음에는 더 좋은 결과를 얻지 못했습니다. –

+0

JVM의 버전, JVM 매개 변수 (특히'-Xmx','-XX : * Size'와 같은 메모리 매개 변수, 가비지 수집기 매개 변수 등)에 대한 힌트를 줄 수 있도록 자세한 정보를 제공해야합니다. '-XX : * GC'). –

답변

6

128MB는 수천만 개의 레코드가있는 Solr 배포의 경우 낮게 보입니다. 실제로는 -Xmx을 사용하여 JVM의 최대 크기를 늘릴 수 있습니다. -XX:MinHeapFreeRatio은 힙 크기가 변경되는 지점 만 변경하지만 과 같은 값인 -Xms을 사용하여 직접 최대 크기를 할당하고 크기 조정을 피할 수도 있습니다.

그러나 가비지 수집 중에 더 긴 일시 중지로 인해 너무 많은 메모리가 지연 될 수 있으므로 메모리를 맹목적으로 던지는 대신 힙에 대해보다 정확한 값을 결정하려고 할 수 있습니다. 명령 줄에서 JVisualVM (VisualGC 플러그인으로 더 좋음) 또는 jstat을 사용하면 Solr이 시작한 후 사용하는 메모리 양, 요청 후 사용되는 양, 일반적으로 일반적인 사용 중에 힙이 어떻게 변하는지를 볼 수 있습니다.

예를 들어, jstat -gcutil <PID>을 사용하면 JVM의 젊은 세대 (E, 에덴에서와 같이)와 오래된 세대 (O 세대)가 얼마나되는지 볼 수 있습니다 (구 세대는 처음에보아야 할 것입니다). 또는 jstat -gc <PID>을 사용하면 백분율 대신 값을 얻을 수 있습니다 (C 열은 용량, 즉 최대 값이며 U 열은 실제 사용량 임). Solr의 작업 세트에 충분한 메모리와 요청 처리에 필요한 메모리가 필요합니다. 이 정보를 사용하여 필요한 정보를 조금 더 세밀하게 조정할 수 있습니다.

+0

덕분에 비 자바 dev에 대한 현장 뒤에 논리를 명확히 :) –

0

코드에 메모리 누수가있는 것 같습니다. 어떤 객체가 메모리를 소비하는지 보려면 힙 덤프를 가져와야 할 수 있습니다. 브라이언 말했듯이

(또는)

, 당신은 더 적은 메모리 구성의 바람둥이를 시작 될 수 있습니다. -Xms 및 -Xmx 명령을 사용하여 tomcat에 할당 된 메모리 양을 확인하십시오.

+0

누수입니까? 아마도 JVM보다 많은 메모리가 필요합니까? –

+0

@BrianAgnew : 이것은 매우 유효한 시점입니다. 결정하기 전에 메모리 누수가있는 메모리 구성. – kosa

+0

제 의견을 좀보세요. 위의 :) –

관련 문제