防止弹性搜索被OOM杀手杀死

 手机用户2602883245 发布于 2022-12-27 14:06

我是新来elasticsearch和我猜我配置方式我的服务器是次优的,因为我正在与OOM杀手短while.This后杀死Elasticsearch/Java进程的一个问题或许可以通过具有可避免服务器配置正确.您能指出一下,为了顺利运行ES,需要更改配置中的哪些内容?

在这两个服务器(都是集群的)上,我有时会回到已被杀死的ES/java进程.

这是当前的设置:

===========================================

服务器1(前端服务器)此服务器具有8GB的RAM,并且还运行gunicorn,Flask和Django

elasticsearch.yml:

node.master: true
node.data: true
bootstrap.mlockall: true

在/ etc /默认/ elasticsearch

ES_HEAP_SIZE=5g
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

===========================================

服务器2(专用Elasticsearch服务器)具有8GB RAM并且没有其他应用程序在运行

elasticsearch.yml:

node.master: false
node.data: true
bootstrap.mlockall: true

在/ etc /默认/ elasticsearch

ES_HEAP_SIZE=5g
MAX_OPEN_FILES=65535
MAX_LOCKED_MEMORY=unlimited

===========================================

在elasticsearch.yml文件中,我看到一行说" You should also make sure that the Elasticsearch process is allowed to lock the memory, eg. by using ulimit -l unlimited"但我没有做任何事情来启用它.我需要在这里采取任何行动吗?

如果我尝试输入,我会...

myuser@es1:~$ sudo ulimit -l unlimited
sudo: ulimit: command not found

ugosan.. 9

这是我在我的ES节点上锁定内存的方法,RedHat/Centos 7上的版本5.4.0(如果他们使用systemd,它将在其他发行版上工作).

您必须在4个不同的地方进行更改:

1)/ etc/sysconfig/elasticsearch

在sysconfig上:/etc/sysconfig/elasticsearch你应该:

ES_JAVA_OPTS="-Xms4g -Xmx4g" 
MAX_LOCKED_MEMORY=unlimited

(用HALF替换4g你可用的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将被锁定,你应该注意到一个重大的性能提升.

2 个回答
  • 所以没有太多你可以配置来防止OOM杀手被调用,但我会告诉你你可以做什么.回顾一下,当Linux认为内存不足并需要释放内存时,会调用OOM杀手.它将选择更长时间运行,高内存进程,这使得Elasticsearch成为主要目标.

    你可以尝试的事情:

      将任何其他生产代码移动到另一个系统.至少在具有8GB内存的前端系统上运行ES和5GB堆,Django和Flask可以强调你的内存使用量.在自己的硬件或实例上运行ES数据节点通常是个更好的主意.

      削减堆大小.Elasticsearch建议使用不超过一半的内存用于堆,因此我将其减少到4GB或更少.然后,您应该密切监视堆使用情况,并继续将其缩小,同时仍保持良好的保证金.

      升级到具有更多内存的更大服务器.这将是我的头号推荐 - 您根本没有足够的内存可用于执行您在一台服务器上尝试的所有操作.

      尝试调整OOM杀手不那么严格 - 不是那么容易做,而且我不知道你会因为整体服务器的总体尺寸而获得什么,但你可以随时尝试:

      https://unix.stackexchange.com/questions/58872/how-to-set-oom-killer-adjustments-for-daemons-permanently

      http://backdrift.org/how-to-create-oom-killer-exceptions

      http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html

    2022-12-27 14:08 回答
  • 这是我在我的ES节点上锁定内存的方法,RedHat/Centos 7上的版本5.4.0(如果他们使用systemd,它将在其他发行版上工作).

    您必须在4个不同的地方进行更改:

    1)/ etc/sysconfig/elasticsearch

    在sysconfig上:/etc/sysconfig/elasticsearch你应该:

    ES_JAVA_OPTS="-Xms4g -Xmx4g" 
    MAX_LOCKED_MEMORY=unlimited
    

    (用HALF替换4g你可用的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将被锁定,你应该注意到一个重大的性能提升.

    2022-12-27 14:08 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有