OutOfMemoryError: пространство кучи Java в сервлете Lucene - PullRequest
1 голос
/ 03 июля 2019

Сервлет Lucene работает на Docker-контейнере openjdk: 8 с параметром -Xmx512M.

Ошибка OutOfMemoryError обнаруживается в некоторых поисковых запросах ... кажется, происходит случайно.

После возникновения этой ошибки поиск невозможен: контейнер Docker начинает принимать 200% ЦП и ставит в очередь запросы.

Когда поступают поисковые запросы, это часть кода:

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 МБ
...