elasticsearch,Memory,elasticsearch" /> elasticsearch,Memory,elasticsearch" />

Memory elasticsearch-最大映射计数与堆大小

Memory elasticsearch-最大映射计数与堆大小,memory,elasticsearch,Memory,elasticsearch,我使用的是elasticsearch docker的官方图片。由于ES需要一定级别的内存映射区域(as),我使用 docker-machine ssh <NAME> sudo sysctl -w vm.max_map_count=262144 docker machine ssh sudo sysctl-w vm.max\u map\u count=262144 我还了解到,分配的内存应该占整个系统内存的50%左右 我不知道这两个人是怎么一起玩的。分配更多内存映射区域如何影响分配

我使用的是elasticsearch docker的官方图片。由于ES需要一定级别的内存映射区域(as),我使用

docker-machine ssh <NAME> sudo sysctl -w vm.max_map_count=262144
docker machine ssh sudo sysctl-w vm.max\u map\u count=262144
我还了解到,分配的内存应该占整个系统内存的50%左右


我不知道这两个人是怎么一起玩的。分配更多内存映射区域如何影响分配的RAM。它是RAM的一部分,还是高于elasticsearch的RAM分配?

总之,堆仅由elasticsearch使用,Lucene将使用剩余内存将索引文件直接映射到内存中,以便快速访问

这就是为什么最佳实践是将一半内存分配给ES堆,将剩余的一半分配给Lucene的主要原因。然而,还有另一个最佳实践可以将其应用到ES堆(有时甚至是偶数)

因此,如果您有一台具有128GB RAM的机器,您不会将64GB分配给ES,但仍然是最大32GB,Lucene将很高兴地占用所有剩余的96GB内存来映射其索引文件


调整内存设置是一个明智的组合,即为ES提供足够的内存(但不要太多),并确保Lucene可以通过尽可能多地使用剩余内存来获得成功。

这并不能回答我的问题。我对内存映射的位置感到困惑。ES希望它至少是262144。增加或减少它意味着什么?每个内存映射区域的大小是多少?它是否随机器的ram而变化?
vm.max_map_count
的默认值为65536,ES建议将其至少增加四倍(因此为262144)。显然,增加它将允许Lucene获得更多虚拟内存来映射索引文件,而减少它会产生相反的效果(增加交换的机会)。内存映射区域与物理RAM不同(因此不是物理RAM的一部分),它们只是磁盘上的区域(或任何可以用文件描述符引用的区域),被认为是物理内存中的区域。这背后的主要思想是提高IO性能。同样,这个答案也可能有帮助:@DarshanChaudhary有什么理由不接受这个答案吗?