我正在使用官方的elasticsearch docker 镜像。由于 ES 需要一定级别的内存映射区域(如 documented ),我使用
增加了它docker-machine ssh <NAME> sudo sysctl -w vm.max_map_count=262144
我还读过here分配的内存应占系统总内存的 50% 左右。
我对这两个如何一起玩感到困惑。分配更多内存映射区域如何影响分配的 RAM。它是 RAM 的一部分,还是高于 Elasticsearch 的 RAM 分配?
最佳答案
总而言之,堆仅由 Elasticsearch 使用,Lucene 将使用其余内存将索引文件直接映射到内存中,以实现极快的访问。
这就是为什么最佳实践是将一半内存分配给 ES 堆,让剩下的一半给 Lucene 的主要原因。但是,还有另一个最佳实践 not allocate more than 32-ish GB of RAM到 ES 堆(有时甚至是 less than 30B )。
所以,如果你有一台 128GB RAM 的机器,你不会分配 64GB 给 ES,但最多仍然是 32GB,Lucene 会很高兴地吞噬所有剩余的 96GB 内存来映射其索引文件。
调整内存设置是一个巧妙的组合,为 ES 提供足够的内存(但不要太多),并确保 Lucene 可以通过使用尽可能多的剩余内存来正常运行。
关于memory - elasticsearch - max_map_count 与堆大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40865208/