簡體   English   中英

為什么我在Solr上執行的每個查詢都填充了10s MB的堆內存?

[英]Why does every query I do on Solr fill my heap memory of 10s of MB?

每次調用Solr服務時,我都很難理解到底是什么耗盡了Java堆內存:
在我的Web應用程序中,我有一個調用Servlet的前端,該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堆內存的屏幕: 這是全新重啟后Solr服務器占用的最小空間

經過3(三)次查詢 這三個查詢稱為您所看到的代碼段

在嘗試了內核管理頁面上建議的optimize之后,堆減少了很多:初始堆減少了1/10: 在此處輸入圖片說明

但這不是解決方案(可能是臨時的,但我不知道如何調用;也許通過某些URL?)
我已經看到,在查詢中強制使用最大數量的結果時,堆內存的增加較小。

我該怎么辦,我在哪里可以看?

您的Solr緩存是否有可能搶占堆?

看起來像這樣:在第一次查詢期間增加,過一會兒保持不變。

因此,如果堆大小增加相同,則可以運行帶有緩存自動預熱功能的優化。 您可以嘗試減少緩存設置。 不推薦這樣做,而只是找到原因。

看一下這里,您可以找到增加堆的一些原因: https : //wiki.apache.org/solr/SolrPerformanceProblems#How_much_heap_space_do_I_need.3F

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM