OutOfMemoryError:Lucene Servlet上的Java堆空间

时间:2019-07-03 19:47:16

标签: java docker lucene full-text-search

Lucene Servlet在带有-Xmx512M参数的docker openjdk:8容器上运行。

OutOfMemoryError 错误出现在某些搜索请求中……似乎是随机发生的。

发生此错误后,无法进行任何搜索:docker容器开始占用200%的cpu,并将请求排队。

搜索请求到达时,这是代码的一部分:

public String search(String indexName,...)  {
    :
    IndexSearcher searcher = createSearcher(indexName);
    :
    SortField[] sortFields = this.parseSortFields(indexName, sort);

    if (sortFields != null) {
        hits = searcher.search(q, pageSize, new Sort(sortFields));
    } else {
        hits = searcher.search(q, pageSize);
    }
    :
}

private IndexSearcher createSearcher(String indexName) throws Exception {
    return new IndexSearcher(createReader(indexName));
}

private IndexReader createReader(String indexName) throws Exception {
    Directory dir = FSDirectory.open(Paths.get(INDEX_DIR + "/" + indexName));
    return DirectoryReader.open(dir);
}

更多详细信息:

  • Lucene v6.6.0
  • 500个并发用户最多(通常更少)
  • 索引文档文件夹占用678 MB

0 个答案:

没有答案