2016-02-05 33 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段存储在单个文件中。因为段是不可变的,所以这些文件永远不会改变。这使得它们非常容易缓存,并且底层操作系统将愉快地将热段保留在内存中以便更快地访问。