elasticsearch官网建议生产环境须要设置bootstrap.memory_lock: truenode
官网的解释 是:发生系统swapping的时候ES节点的性能会很是差,也会影响节点的稳定性。因此要不惜一切代价来避免swapping。swapping会致使Java GC的周期延迟从毫秒级恶化到分钟,更严重的是会引发节点响应延迟甚至脱离集群。linux
因此最好限制住elasticsearch占用的内存状况,可选少用swapdocker
开启bootstrap.memory_lock: true
后,在Elasticsearch集群启动的时候,会报以下错误bootstrap
ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked
我使用docker-compose布署的时候,集群一直在重启失败间循环!vim
此方案适用于非systemd管理的linux发行版,centos 6及如下能够仅经过这个方案解决centos
ulimit -l unlimited
root权限编辑/etc/security/limits.confbash
$ sudo vim /etc/security/limits.conf
添加以下内容,保存退出服务器
* soft memlock unlimited * hard memlock unlimited
这里的*表明的是全部用户名称,能够更换为指定用户名
另:这里有个坑就是若是/etc/security/limits.d
文件夹下的有配置文件,那么会覆盖刚才修改的文件,因此请确保该目录没有其它文件,若有请联系运维人员确认删除app
修改/etc/sysctl.conf
运维
sudo echo "vm.swappiness=0" >> /etc/sysctl.conf
这个参数的做用是告诉Linux内核尽少的使用swap分区,不等于禁用swap,经过少使用swap来提升性能。
若是想当即生效而不是重启以后让sysctl.conf生效,请使用sysctl -p
从新登陆或重启服务器方可生效
适用于systemd管理的发行版,有文章提到centos 7须要使用此方案,本人使用debian 9.9.0 亲测解决问题,推荐先完成上边的方案后尝试本方案
这里仍是推荐使用上边方法的第3步,尽少使用swap分区
在Centos7系统中,使用Systemd替代了以前的SysV。/etc/security/limits.conf文件的配置做用域缩小了。/etc/security/limits.conf的配置,只适用于经过PAM认证登陆用户的资源限制,它对systemd的service的资源限制不生效。所以登陆用户的限制,经过/etc/security/limits.conf与/etc/security/limits.d下的文件设置便可。
对于systemd service的资源设置,则需修改全局配置,全局配置文件放在/etc/systemd/system.conf和/etc/systemd/user.conf,同时也会加载两个对应目录中的全部.conf文件/etc/systemd/system.conf.d/.conf和/etc/systemd/user.conf.d/.conf。system.conf是系统实例使用的,user.conf是用户实例使用的。
sudo vim /etc/systemd/system.conf
最下方添加
DefaultLimitNOFILE=65536 DefaultLimitNPROC=32000 DefaultLimitMEMLOCK=infinity
保存, 重启系统
固然因为我是使用的docker,而不是包管理器安装的,给出的是全局的方案
sudo systemctl edit elasticsearch
此命令会在/etc/systemd/system下建立elasticsearch.service.d/override.conf文件
添加以下内容
[Service] LimitMEMLOCK=infinity
保存,退出,执行以下命令生效
sudo systemctl daemon-reload
如未生效,请尝试重启系统
针对使用tar.gz包,指定内存参考如图
咱们按图索骥使用命令ES_JAVA_OPTS="-Xms512m -Xmx512m" ./bin/elasticsearch
若是此时出现 [2019-06-20T07:01:36,305][WARN ][o.e.b.JNANatives ] [node-1] Unable to lock JVM Memory: error=12, reason=Cannot allocate memory [2019-06-20T07:01:36,340][WARN ][o.e.b.JNANatives ] [node-1] This can result in part of the JVM being swapped out. [2019-06-20T07:01:36,343][WARN ][o.e.b.JNANatives ] [node-1] Increase RLIMIT_MEMLOCK, soft limit: 16777216, hard limit: 16777216 [2019-06-20T07:01:36,343][WARN ][o.e.b.JNANatives ] [node-1] These can be adjusted by modifying /etc/security/limits.conf, for example: # allow user 'hellxz' mlockall hellxz soft memlock unlimited hellxz hard memlock unlimited 请再尝试加上第一种方案,两种方案同时使用
以上就是这些内容,但愿能对读者有所帮助
声明,禁止布布扣、码迷、马开东、01海、colabug等网站复制转发此文章,其余请保留文章出处