我是新来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将被锁定,你应该注意到一个重大的性能提升.
所以没有太多你可以配置来防止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
这是我在我的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将被锁定,你应该注意到一个重大的性能提升.