官网说明:

elasticsearch官网建议生产环境需要设置bootstrap.memory_lock: true

官网的解释 是:发生系统swapping的时候ES节点的性能会非常差,也会影响节点的稳定性。所以要不惜一切代价来避免swapping。swapping会导致Java GC的周期延迟从毫秒级恶化到分钟,更严重的是会引起节点响应延迟甚至脱离集群。

所以最好限制住elasticsearch占用的内存情况,可选少用swap

错误内容:

开启bootstrap.memory_lock: true后,在Elasticsearch集群启动的时候,会报如下错误

ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked

我使用docker-compose布署的时候,集群一直在重启失败间循环!

解决方法:

方案1:

此方案适用于非systemd管理的linux发行版,centos 6及以下可以仅通过这个方案解决

临时解决方法:
ulimit -l unlimited
永久解决方法:

root权限编辑/etc/security/limits.conf

$ sudo vim /etc/security/limits.conf

添加如下内容,保存退出

* soft memlock unlimited
* hard memlock unlimited

这里的*代表的是所有用户名称,可以更换为指定用户名

另:这里有个坑就是如果/etc/security/limits.d文件夹下的有配置文件,那么会覆盖刚才修改的文件,所以请确保该目录没有其它文件,如有请联系运维人员确认删除

修改/etc/sysctl.conf

sudo echo "vm.swappiness=0" >> /etc/sysctl.conf

这个参数的作用是告诉Linux内核尽少的使用swap分区,不等于禁用swap,通过少使用swap来提高性能。

如果想立即生效而不是重启之后让sysctl.conf生效,请使用sysctl -p

重新登录或重启服务器方可生效

方案2:

适用于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,而不是包管理器安装的,给出的是全局的方案

局部生效方式:(针对包管理器安装elasticsearch的形式)
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等网站复制转发此文章,其他请保留文章出处

【已解决】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked的更多相关文章

  1. ES解决bootstrap checks failed, memory locking requested for elasticsearch process but memory is not locked问题

    问题描述: ERROR: [1] bootstrap checks failed[1]: memory locking requested for elasticsearch process but ...

  2. elasticsearch报错之 memory locking requested for elasticsearch process but memory is not locked

    安装elasticsearch报错如下: [2019-01-14T03:57:16,453][ERROR][o.e.b.Bootstrap ] [ip-172-31-30-62.ec2.interna ...

  3. elasticsearch6.4 memory locking requested for elasticsearch process but memory is not locked

    [2018-10-18T05:28:57,713][ERROR][o.e.b.Bootstrap ] [node-45] node validation exception[1] bootstrap ...

  4. elasticsearch6.4 memory locking requested for elasticsearch process but memory is not locked 终极解决

    echo "es hard memlock unlimited">>/etc/security/limits.confecho "es soft memloc ...

  5. ERROR: bootstrap checks failed

    错误描述:Linux默认配置的参数过小,需要自己设置 max file descriptors [4096] for elasticsearch process is too low, increas ...

  6. 启动Sonar报错,ERROR: [1] bootstrap checks failed [1]: system call filters failed to install

    错误提示信息: ERROR: [1] bootstrap checks failed[1]: system call filters failed to install; check the logs ...

  7. docker 启动 容器----bootstrap checks failed

    错误信息: bootstrap checks failed 解决方法: 1.修改elasticsearch.yml配置文件,允许外网访问. vim config/elasticsearch.yml,增 ...

  8. ElasticSearch启动报错,bootstrap checks failed

    修改elasticsearch.yml配置文件,允许外网访问. vim config/elasticsearch.yml# 增加 network.host: 0.0.0.0 启动失败,检查没有通过,报 ...

  9. idea中解决Error:java: Compilation failed: internal java compiler error的问题

    项目中,使用gradle做项目构建,当我们想更改JDK的版本时,报以下错误: Information:Using javac 1.8.0_111 to compile java sourcesInfo ...

随机推荐

  1. 《Google软件测试之道》心得笔记1

    Google软件测试介绍 把开发和测试融合在一起——开发和测试必须同时展开 开发人员自己要对自己写的代码负责,比专职的测试人员更适合做测试工作. 测试开发工程师SET 对于Google拥有很少量的测试 ...

  2. 【数据结构(C语言版)系列一】 线性表

    最近开始看数据结构,该系列笔记简单记录总结下所学的知识,更详细的推荐博主StrayedKing的数据结构系列,笔记部分也摘抄了博主总结的比较好的内容. 一些基本概念和术语 数据是对客观事物的符号表示, ...

  3. Tarjan UVALive 6511 Term Project

    题目传送门 /* 题意:第i个人选择第a[i]个人,问组成强联通分量(自己连自己也算)外还有多少零散的人 有向图强联通分量-Tarjan算法:在模板上加一个num数组,记录每个连通分量的点数,若超过1 ...

  4. jmeter(九)分布式测试

    Jmeter 是java 应用,对于CPU和内存的消耗比较大,因此,当需要模拟数以千计的并发用户时,使用单台机器模拟所有的并发用户就有些力不从心,甚至会引起JAVA内存溢出错误.为了让jmeter工具 ...

  5. JS中的对象之原型

    对象 ECMAScript做为一个高度抽象的面向对象语言,是通过_对象_来交互的.即使ECMAScript里边也有_基本类型_,但是,当需要的时候,它们也会被转换成对象. 一个对象就是一个属性集合,并 ...

  6. Objective-C Properties

    Objective-C Properties Apple introduced properties, a combination of new compiler directivesand a ne ...

  7. H.264学习笔记3——帧间预测

    帧间预测主要包括运动估计(运动搜索方法.运动估计准则.亚像素插值和运动矢量估计)和运动补偿. 对于H.264,是对16x16的亮度块和8x8的色度块进行帧间预测编码. A.树状结构分块 H.264的宏 ...

  8. mysql 5.7安装过程中,初始化的问题

    初始化不指定参数文件,如使用以下命令初始化: ./mysqld --initialize --user=mysql --basedir=/data/mysql/barry_mysql --datadi ...

  9. rem手机端页面自适应完美解决方案(最新)

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  10. 修改qq热键后 安全设置-》自动锁定设置 就能保存住qq的热键了