我是弹性搜索的新手,我猜测我配置服务器的方式是次优的,因为我遇到了OOM杀手在短暂之后杀死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,没有运行其他应用程序
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
答案 0 :(得分: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
(用建议的here替换4g HALF您可用的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将被锁定,您应该注意到性能的重大提升。
答案 1 :(得分:6)
所以没有太多你可以配置来防止OOM杀手被调用,但我会告诉你你可以做什么。回顾一下,当Linux认为内存不足并需要释放内存时,会调用OOM杀手。它会选择更长时间运行,高内存进程,这使得Elasticsearch成为主要目标。
你可以尝试的事情:
将任何其他生产代码移至另一个系统。至少在 前端系统,8GB内存,运行ES,5GB堆, Django和Flask可以强调你的内存使用量。通常是一个 更好的想法是在自己的硬件或实例上运行ES数据节点。
剪切堆大小。 Elasticsearch建议使用不超过一半 堆的内存,所以我把它减少到4GB或更少。你应该 然后密切监视堆使用情况并继续棘手 当你仍然有一个不错的保证金。
升级到具有更多内存的更大服务器。这将是我的号码 一个建议 - 你根本没有足够的内存可用 在一台服务器上做你想做的一切。
尝试将OOM杀手调整得不那么严格 - 这并不容易 我不知道由于服务器总体规模较小,你将获得什么 但你可以随时试验:
http://backdrift.org/how-to-create-oom-killer-exceptions
http://www.oracle.com/technetwork/articles/servers-storage-dev/oom-killer-1911807.html