我有一台 ES 2.2.0 的专用机器。它运行在 Windows Server 2012 R2 上,拥有 128GB 内存。关于ES,我计划在这台机器上的集群中有两个节点。根据elasticsearch.yml中ES的推荐:
确保ES_HEAP_SIZE
环境变量设置为大约一半的内存
我要设置ES_HEAP_SIZE = 50g
这个值合适吗?
UPDATE
我进一步搜索并找到了此信息
https://discuss.elastic.co/t/can-i-run-multiple-elaticsearch-nodes-on-the-same-machine/67 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
"
有人可以对此发表评论吗?
最好的做法是切勿提供超过 32GB 的空间 https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html#compressed_oops的 RAM 分配给 Elasticsearch(安全起见为 31GB),其余部分留给文件系统缓存和操作系统。由于 Lucene 不使用太多堆,因此它将使用大部分剩余的可用空间来管理其段。
32GB 限制的原因是,只有当您不分配超过 32GB 的 RAM 时,Java 才能使用压缩指针,如果有更多 RAM,Java 将恢复使用普通指针,并且 CPU 内存带宽性能将下降,即使您分配的 RAM 不超过 32GB。有更多的记忆。
因此,既然你有一台拥有充足内存的大机器,你可以做的就是在上面运行两个节点,为每个节点分配 31GB,这样就留下 66GB 用于文件系统缓存,Lucene 会很高兴地吞噬它来完成它的事情。
现在,只需知道,如果您在一台计算机上运行集群,并且该机器出现故障,则您的集群将崩溃,您的客户端应用程序也会崩溃。然而,如果你有两台这么大的机器(似乎是这样 https://stackoverflow.com/questions/35677833/how-to-set-up-two-machines-for-a-cluster-with-two-nodes-on-each-machine),然后确保设置cluster.routing.allocation.same_shard.host: true
为了确保主分片和副本分片不会落在同一主机上,因为您不会从高可用性中受益。
更多信息:
- 了解 ES 决定的原因默认使用压缩oops https://github.com/elastic/elasticsearch/issues/13187
- 阅读后面的详细信息压缩哎呀 https://docs.oracle.com/javase/8/docs/technotes/guides/vm/performance-enhancements-7.html#compressedOop增强
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)