为什么我在Solr上执行的每个查询都会填满10 MB的堆内存?

时间:2016-08-04 16:20:19

标签: java rest solr cloudera heap-memory

每次调用Solr服务时,我都很难理解吃掉我的java堆内存的原因:
在我的Web应用程序中,我有一个调用servlet的前端,它使用这段代码发送SolrQuery:

public class SolrService extends Application {
public static String url = Config.SOLR_HOST + ":" + Config.SOLR_SERVER_PORT;
final static HttpSolrServer solr = new HttpSolrServer(SolrService.url+"/"+Config.SOLR_INDEX+"/"+Config.SOLR_TYPE);

//in another class
SolrQuery query = new SolrQuery(q); 
        query.setStart(0); 
        query.setRows(limitRows);
        query.addSortField("score", ORDER.desc);
QueryResponse response;

        response = SolrService.solr.query(query,SolrRequest.METHOD.POST);
SolrDocumentList results = response.getResults();
 SolrDocument doc = results.get(i);
//the response is then extracted in maps and returned

每次我发出请求时,我的Java堆内存都会大幅增加。这是完成0次查询时java堆内存的屏幕: this is the minimum space the Solr server takes after a fresh restart

经过3(3)次查询 The three queries called the piece of code that you saw

尝试在核心的管理页面上建议的optimize后,堆下降了很多:初始的1/10: enter image description here

但这不是一个解决方案(也许是暂时的,但我不知道如何调用它;也许是通过一些URL?)
我已经看到在查询中强制最大数量的结果,堆内存的增加更小。

我能做什么,在哪里可以看到?

1 个答案:

答案 0 :(得分:0)

你的solr缓存是否有可能抓住堆?

看起来像是:在第一次查询期间增加,并在一段时间后保持不变。

因此,如果堆大小相同,您可以运行带缓存自动升温的优化来查看。您可以尝试减少缓存设置。不建议这样做,但只是为了找到原因。

看看这个,你可以找到增长堆的一些原因:https://wiki.apache.org/solr/SolrPerformanceProblems#How_much_heap_space_do_I_need.3F