使用mlockall禁用交换?

时间:2016-06-03 07:30:06

标签: elasticsearch

ES允许使用mlockall设置为Linux和Windows禁用交换,但在ES参考中,它说:

mlockall可能会导致JVM或shell会话在尝试分配的内存超出可用内存时退出!

我的问题是,将mlockall设置为true是最佳做法吗?

2 个答案:

答案 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将被锁定,您应该注意到性能的重大提升。