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);
}
更多详细信息: