2016-02-05 32 views
4

我對從ES官方文檔以下配額一個問題:如何ElasticSearch和Lucene共享內​​存

But if you give all available memory to Elasticsearch’s heap, 
there won’t be any left over for Lucene. 
This can seriously impact the performance of full-text search. 

如果我的服務器有80G的內存,我發出以下命令來啓動ES節點:bin/elasticsearch -xmx 30g 這意味着我只給ES 30g內存的最大處理。 Lucene如何使用左邊的50G,因爲Lucene在ES過程中運行,它只是過程的一部分。

回答

8

Xmx參數只是表示您爲ES Java進程分配了多少。但是,將RAM分配給堆並不是使用服務器上可用內存的唯一方法。

Lucene的確實的ES進程內運行,但Lucene的不僅利用分配的堆的,它也被大量利用管理索引段文件的文件系統緩存使用的內存。

Lucene的主要提交者有兩篇很棒的博文(this onethis other one),詳細解釋了Lucene如何利用所有可用的剩餘內存。

底線是爲ES進程分配30GB堆(使用-Xmx30g),然後Lucene會很樂意地使用剩下的任務來完成需要完成的任務。

3

Lucene的通過OS使用斷堆存儲器。它在關於Heap sizing and swapping的部分的Elasticsearch指南中進行了描述。

Lucene旨在利用底層操作系統來緩存內存中的數據結構。 Lucene段存儲在單個文件中。因爲段是不可變的,所以這些文件永遠不會改變。這使得它們非常容易緩存,並且底層操作系統將愉快地將熱段保留在內存中以便更快地訪問。