Сервлет 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 МБ