一尘不染

对于群集中具有两个节点的专用计算机,ES_HEAP_SIZE的正确值

elasticsearch

我有一台专用于ES 2.2.0的计算机。它运行在Windows Server 2012
R2上,并具有128GB内存。关于ES,我计划在此计算机上的群集中有两个节点。根据elasticsearch.yml中的ES建议:

确保将ES_HEAP_SIZE环境变量设置为大约一半的内存

我要设定 ES_HEAP_SIZE = 50g

这个值合适吗?

更新

我做了进一步的搜索并找到了此信息

https://discuss.elastic.co/t/can-i-run-multiple-elaticsearch-nodes-on-the-
same-machine/67

看来“ Max heap size for each node instance should be < 32Gb

有人可以对此发表评论吗?


阅读 287

收藏
2020-06-22

共1个答案

一尘不染

最佳做法是,不要给
Elasticsearch分配超过32GB的RAM(为了安全起见,不要分配31GB),其余的留给文件系统缓存和操作系统使用。由于Lucene不会使用太多堆,它将使用剩余的大部分资源来管理其段。

此32GB限制的原因是,仅当您分配的RAM不超过32GB时,Java才可以使用压缩的指针,如果有更多的RAM,则Java将恢复使用普通指针,并且即使您不使用它,CPU内存带宽性能也会降低有更多的记忆。

因此,由于您有一台拥有大量内存的大型计算机,因此您可以在其上运行两个节点,并为每个节点分配31GB的空间,这将为文件系统缓存留出66GB的空间,Lucene会很乐意吞噬它来做事。

现在,只需知道如果您在一台计算机上运行群集,并且该计算机发生故障,则群集将无法正常运行,客户端应用程序也将如此。但是,如果您有两台这样的大型计算机),请确保进行设置cluster.routing.allocation.same_shard.host: true,以确保主和副本碎片不会落在同一主机上,因为您将无法从高可用性中受益。

更多信息:

2020-06-22