我对ES官方文档中的以下配额有一个疑问:
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流程中运行,所以这只是流程的一部分。
bin/elasticsearch -xmx 30g
该Xmx参数仅指示您为ES Java进程分配了多少 堆 。但是,将RAM分配给堆并不是使用服务器上可用内存的唯一方法。
Xmx
Lucene确实在ES进程中运行,但是Lucene不仅利用分配的堆,而且还通过大量利用文件系统缓存来管理索引段文件来使用内存。
Lucene的主要提交者有这两篇很棒的博客文章(这一篇和另一篇),它们更详细地解释了Lucene如何利用所有可用的剩余内存。
最重要的是(使用-Xmx30g)为ES进程分配了30GB的堆,然后Lucene会很乐意消耗剩下的东西来做需要做的事情。
-Xmx30g