2013-03-27 25 views
2

我已經設置了elasticsearch,它工作的很棒。爲什麼ElasticSearch堆大小不能恢復正常?

我已經做了一些大容量插入並做了一些負載測試。然而,它已經閒置了一段時間,我不知道爲什麼堆大小不會減少到大約50mb這是什麼時候開始的?我猜GC沒有發生?

enter image description here

請注意節點上AWS不同的機器上運行。它們都在小型實例中,每個實例都有1.7GB的RAM。

任何想法?

回答

2

也許。很難說,JVM能夠管理內存,並且做它認爲最好的。它可能會避免GC循環,因爲它不是必需的。實際上,建議將mlockall設置爲true,以便堆在啓動時完全分配,並且永遠不會更改。

這不是一個真正的問題ES是使用內存堆...內存被使用,而不是保存。除非你有記憶問題,否則我會忽略它並繼續。

+2

一件事添加到這個答案是,在默認情況下,當它使用的內存分配75%ElasticSearch纔會啓動GC。這裏非常有用的文章:http://jprante.github.com/2012/11/28/Elasticsearch-Java-Virtual-Machine-settings-explained.html – Abs 2013-04-04 09:37:18

1

ElasticSearch和Lucene維護緩存數據以執行快速排序或構面。

如果您的查詢做了排序,這可能會增加Lucene FieldCache的大小,因爲這裏的對象不符合GC的條件,所以可能無法釋放。 因此,75%的默認閾值(CMSInitiatingOccupancyFraction)不適用於此處。