2017-03-07 80 views
0

在出現內存不足錯誤時收到堆轉儲。 現在分析轉儲在Visual VMSolr堆轉儲 - 如何診斷

TreeMap$Entry FieldCacheImpl$SortedDocValues

看到了很多的byte []數組(8GB我們堆的77%),我們正在考慮切換到打開docValues以「真」爲但在我們嘗試使用DocValues並需要我們的200M文檔索引的重新索引 之前,我們會對其進行排序,但寧願對根本原因作出明確定義。在我們的4個數據中心的每一箇中。

有關我應該在堆轉儲中尋找什麼以獲取確切的根本原因的任何建議?

回答

1

幾乎可以保證通過啓用文檔值可以提高工作效率。如果你想要做的大編制索引之前的一些證據,你可以只:

  1. 創建當前設置的較小版本,說20M
  2. 來看,它在一個較小的JVM堆大小,如1GB。看它OOM,如果沒有,降低堆,直到它奧姆斯
  3. 立即啓用docvalues,重新索引並在同一個堆運行,它應該是明顯更好
  4. 現在你可以在你的真實督促設置一些實施docvalues安心

編輯你的評論:好吧,如果你正在對200M文檔進行排序......不知道一堆4GB是如此之大。你可以檢查你是否緩存fq,你不需要/不起作用(比如在具有毫秒精度的日期字段中)。 fqs會在大型索引中佔用一些內存。

+0

謝謝是的,我們確實添加了docValues,並且顯着改善了從7GB的峯值到4GB的峯值節省了大約2-3GB的堆。這表示4GB的堆仍然非常大,我們想知道堆轉儲中還有哪些要查找的內容 - 任何要關注的緩存或區域。謝謝! – kellyfj

+0

增加了一些註釋 – Persimmonium

+0

感謝您的更新 - 是的,爲了安全起見,我們禁用了filterCache(<1%的查詢使用fq,並且該緩存的命中率<1%)。 – kellyfj