내 solr 설정은 마스터, 중계기 및 두 개의 슬레이브로 구성됩니다. 슬레이브는 매 10 초마다 각각의 마스터를 폴링합니다. 검색은 마스터 노드에만 업데이트가 수행되는 동안 슬레이브 노드에서만 처리됩니다. 이들은 리눅스 박스의 Jboss 어플리케이션 서버에 배치됩니다. sorl 버전은 4.0입니다.SOLR - 많은 수의 공개 검색 자
우리가 직면 한 문제는 매주 한 번씩 슬레이브 노드를 다시 시작하여 현재 해결중인 며칠 내에 슬레이브 박스가 하드 디스크 공간을 모두 소모한다는 것입니다. 하드 디스크 공간이 부족한 이유는 Jboss가 수백 개의 삭제 된 인덱스 파일에 대한 참조를 보유하고 있기 때문입니다.
SolrCore에 열린 검색자가 많아서 삭제 된 파일 참조가 살아 있습니다. solrconfig.xml에 따라 언제든지 최대 2 명의 공개 검색자가 있어야합니다.
내가 SolrCore 쿼리가 실행 된 경우에만 오픈 수색자를 보유하고 마지막 쿼리가 아직 완료되지 않은 상태에서 복제주기가 핵심의 등록 수색자을 변경 것을 입증 할 수 있었다 또 다른 것은. 쿼리가 시작될 때 검색자는 SolrCore에 의해 메모리에 영원히 저장됩니다.
이 문제는 쿼리가 우리가 작성한 SearchPlugin을 사용할 때만 발생합니다. 검색 플러그인에서 우리는 SolrRequest과 SolrCore 개체를 닫습니다. 그러나 여전히 연관된 검색자를 닫지 않는 것 같습니다.
SolrCore portfolioIndexCore = container.getCore(portfolioCoreName);
SolrIndexSearcher portfolioIndexSearcher = portfolioIndexCore.getSearcher().get();
검색이 완료 :
finally {
if (null != portfolioSolrReq) portfolioSolrReq.close();
if (null != portfolioIndexCore) {
portfolioIndexCore.close();
}
}
나는 위의 마지막에 차단 변경 시도 :
finally {
if (null != portfolioSolrReq) portfolioSolrReq.close();
if (null != portfolioIndexCore) {
RefCounted<SolrIndexSearcher> searcher = portfolioIndexCore.getNewestSearcher(false);
if (searcher.get() != portfolioIndexSearcher) {
log.warn("Current Searcher for the Core " + portfolioIndexCore
+ " has changed. Old Searcher=[" + portfolioIndexSearcher + "], new Searcher=["
+ searcher.get() + "]");
portfolioIndexSearcher.close();
portfolioIndexSearcher = null;
}
searcher.decref();
portfolioIndexCore.close();
}
}
하지만이 또한 도움이하지 않는 것 같습니다.
위의 문제에 대한 조언이 도움이 될 것입니다.