Elasticsearch 和 Lucene 對內存使用狀況:
Elasticsearch 限制的內存大小是 JAVA 堆空間的大小,不包括Lucene 緩存倒排索引數據空間。html
indices.queries.cache.size:10%
indices.memory.index_buffer_size: 10%
indices.memory.min_index_buffer_size
用於這是最小值,默認爲 48mb。indices.memory.max_index_buffer_size
用於最大大小,無默認值。indices.requests.cache.size:1%
Elasticsearch默認安裝後設置的內存是1GB,這是遠遠不夠用於生產環境的。
有兩種方式修改Elasticsearch的堆內存:git
export ES_HEAP_SIZE=10g
在es啓動時會讀取該變量;./bin/elasticsearch -Xmx10g -Xms10g
給es分配內存時要注意,至少要分配一半兒內存留給 Lucene。
分配給 es 的內存最好不要超過 32G ,由於若是堆大小小於 32 GB,JVM 能夠利用指針壓縮,這能夠大大下降內存的使用:每一個指針 4 字節而不是 8 字節。若是大於32G 每一個指針佔用 8字節,而且會佔用更多的內存帶寬,下降了cpu性能。github
還有一點, 要關閉 swap 內存交換空間,禁用swapping。頻繁的swapping 對服務器來講是致命的。
總結:給es JVM棧的內存最好不要超過32G,留給Lucene的內存越大越好,Lucene把全部的segment都緩存起來,會加快全文檢索。緩存
參考文檔:
https://nereuschen.github.io/...
https://www.elastic.co/guide/...