每次调用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堆内存的屏幕:
尝试在核心的管理页面上建议的optimize
后,堆下降了很多:初始的1/10:
但这不是一个解决方案(也许是暂时的,但我不知道如何调用它;也许是通过一些URL?)
我已经看到在查询中强制最大数量的结果,堆内存的增加更小。
我能做什么,在哪里可以看到?
答案 0 :(得分:0)
你的solr缓存是否有可能抓住堆?
看起来像是:在第一次查询期间增加,并在一段时间后保持不变。
因此,如果堆大小相同,您可以运行带缓存自动升温的优化来查看。您可以尝试减少缓存设置。不建议这样做,但只是为了找到原因。
看看这个,你可以找到增长堆的一些原因:https://wiki.apache.org/solr/SolrPerformanceProblems#How_much_heap_space_do_I_need.3F