ES允许使用mlockall设置为Linux和Windows禁用交换,但在ES参考中,它说:
mlockall可能会导致JVM或shell会话在尝试分配的内存超出可用内存时退出!
我的问题是,将mlockall设置为true是最佳做法吗?
答案 0 :(得分:1)
最好是禁用交换。任何交换的系统都会降低性能,无论我们是否谈论Elasticsearch或该机器上的其他进程(不用说最好的是ES是机器上运行的单个进程)。
你的陈述是错误的:
ES允许使用mlockall设置_
禁用交换
mlockall
锁定分配给Elasticsearch堆的内存,不允许操作系统将堆内存交换到磁盘。
Elasticsearch documentation提供三个选项,第一个是最好的,最后一个是最后的选择:
禁用互换
最简单的选择是完全禁用交换。通常Elasticsearch是在盒子上运行的唯一服务,其内存使用量由ES_HEAP_SIZE环境变量控制。应该不需要启用交换。
配置swappiness
第二个选项是确保将sysctl值vm.swappiness设置为0.这会降低内核交换的倾向,并且在正常情况下不应导致交换,同时仍允许整个系统在紧急情况下交换。
<强> mlockall用于强>
第三个选项是在Linux / Unix系统上使用mlockall,或在Windows上使用VirtualLock,尝试将进程地址空间锁定到RAM中,以防止任何Elasticsearch内存被换出。
答案 1 :(得分:0)
以下是我在ES节点上锁定内存的方法,RedHat / Centos 7上的5.4.0版(如果使用 systemd ,它将适用于其他发行版)。
mlockall现在称为 bootstrap.memory_lock
您必须在4个不同的地方进行更改:
1) / etc / sysconfig / elasticsearch
在sysconfig上:/etc/sysconfig/elasticsearch
你应该:
ES_JAVA_OPTS="-Xms4g -Xmx4g"
MAX_LOCKED_MEMORY=unlimited
(用建议的here替换4g HALF您可用的RAM)
2) /etc/security/limits.conf
在安全限制配置:/etc/security/limits.conf
你应该
elasticsearch soft memlock unlimited
elasticsearch hard memlock unlimited
3) /usr/lib/systemd/system/elasticsearch.service
在服务脚本上:/usr/lib/systemd/system/elasticsearch.service
您应取消注释:
LimitMEMLOCK=infinity
您应该在更改服务脚本
后执行systemctl守护程序重新加载4) /etc/elasticsearch/elasticsearch.yml
最后在elasticsearch配置:/etc/elasticsearch/elasticsearch.yml
你应该添加:
bootstrap.memory_lock: true
多数民众赞成重启您的节点,RAM将被锁定,您应该注意到性能的重大提升。