• 【已解决】ERROR: bootstrap checks failed memory locking requested for elasticsearch process but memory is not locked


    官网说明:

    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等网站复制转发此文章,其他请保留文章出处

  • 相关阅读:
    [原创] 腾讯RTX二次开发相关的一些注意事项
    小技巧:快速清除项目中的svn相关文件!
    用SQL实现的BASE64加密及解密函数(SQL2005以上有效)
    摄影基础知识
    优秀的WEB前端开发框架:Bootstrap!
    virtualbox 安装 mac os x lion 10.7实现全屏显示!
    按摩穴位治疗鼻炎
    实用技巧:利用Excel实现客户档案的统一管理
    写了个小游戏:怪兽岛之挖矿练习
    闲来无事,用javascript写了一个简单的轨迹动画
  • 原文地址:https://www.cnblogs.com/hellxz/p/11009634.html
Copyright © 2020-2023  润新知