Boostrap.memory_lock = trueを設定しました更新された/etc/security/limits.conf追加されたmemlock無制限のElasticSearchユーザー
私のElasticSearchは、何ヶ月も問題なく実行されていました。突然、1日前に失敗しました。ログに以下のエラーが表示され、プロセスが開始されません
エラー:bootstrapは、elasticsearchプロセスに要求された失敗したメモリロックをチェックしますが、メモリはロックされていません
Ulimit -asを押すと、最大ロックメモリが無制限に設定されているのがわかります。ここで何が問題になっていますか?私は何時間も試してきましたが、すべて無駄でした。助けてください。
OSはRHEL7.2 Elasticsearch5.1.2です
ulimit-出力として
core file size (blocks -c) 0
data seg size (kbytes -d) unlimited
scheduling policy (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 83552
max locked memory (kbytes, -l) unlimited
max memory size (kbytes, -m) unlimited
open files (-n) 65536
pipe size (512 bytes, -q) 8
POSIX message queues (bytes,-q) 819200
real-time priority (-r) 0
stack size kbytes, -s) 8192
cpu time seconds, -t) unlimited
max user processes (-u) 4096
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
これは、RedHat/Centos 7のESノードのメモリをロックするために行ったことです(他のディストリビューションでsystemdを使用している場合は機能します)。
4つの異なる場所で変更を加える必要があります。
1)/ etc/sysconfig/elasticsearch
Sysconfigの場合:/etc/sysconfig/elasticsearch
あなたが持っている必要があります:
ES_Java_OPTS="-Xms4g -Xmx4g"
MAX_LOCKED_MEMORY=unlimited
(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 daemon-reload
サービススクリプトを変更した後
4)/ etc/elasticsearch/elasticsearch.yml
最後にelasticsearchconfigで:/etc/elasticsearch/elasticsearch.yml
追加する必要があります:
bootstrap.memory_lock: true
それで、ノードを再起動すると、RAMがロックされ、パフォーマンスが大幅に向上することに気付くはずです。
OS = Ubuntu 16
ElasticSearch = 5.6.3
私も同じ問題を抱えていました。
Elasticsearch.ymlに設定しました
bootstrap.memory_lock: true
そして私は私のログに入った:
elasticsearchプロセスにメモリロックが要求されましたが、メモリはロックされていません
私はいくつかのことを試しましたが、実際には1つのことだけを行う必要があります( https://www.elastic.co/guide/en/elasticsearch/reference/master/setting-system-settings.html によると=);
ファイル:
/etc/systemd/system/elasticsearch.service.d/override.conf
追加
[Service]
LimitMEMLOCK=infinity
少し説明します。
本当に面白いのは、systemdがulimitの設定をまったく気にしないことです。 ( https://fredrikaverpil.github.io/2016/04/27/systemd-and-resource-limits/ )。この事実は簡単に確認できます。
/etc/security/limits.confで設定
elasticsearch-memlock無制限
elasticsearchの最大ロックメモリが無制限であることを確認してください
$ Sudo su elasticsearch -s/bin/bash $ ulimit -l
bootstrap.memory_lockを無効にします:/etc/elasticsearch/elasticsearch.ymlでtrue
#bootstrap.memory_lock:true
systemd経由でelasticsearchのサービスを開始
#service elasticsearch start
開始後、サービスelasticsearchの最大メモリロック設定を確認してください
#systemctl show elasticsearch | grep -i limitmemlock
ああ、神様! ulimitを介して無制限の最大memlockサイズを設定しましたが、systemdはそれを完全に無視します。
LimitMEMLOCK=65536
それで、結論に達します。有効にしたsystemdを介してelasticsearchを開始するには
bootstrap.memory_lock:true
ulimitの設定を気にする必要はありませんが、systemdの設定ファイルで明示的に設定する必要があります。
話の終わり。
/ etc/sysconfig/elasticsearchファイルセットで設定してみてくださいMAX_LOCKED_MEMORY = unlimited
in/ usr/lib/systemd/system/elasticsearch.serviceset LimitMEMLOCK = infinity
elasticsearch開始プロセスがunlimited
に設定されていることを確認してください。たとえば/etc/security/limits.conf
またはroot
で構成されたユーザーとしてelasticsarchを開始し、limits.confでワイルドカードエントリを定義します(rootの場合はnot)。仕事。
確認するためにそれをテストしてください:あなたは例えばulimit -a ; exit
の「#StartDaemon」の直後に/etc/init.d/elasticsearch
を置き、bash /etc/init.d/elasticsearch start
で開始します(開始メカニズムに応じて調整します)。
フォロー この投稿 elasticsearch6.xを使用したubuntu18.04では、ファイルLimitMEMLOCK=infinity
にエントリ/usr/lib/systemd/system/elasticsearch.service
がありませんでした。
そのため、そのファイルにそれを追加し、MAX_LOCKED_MEMORY=unlimited
に/etc/default/elasticsearch
を設定することでうまくいきました。
Jvmオプションは/etc/elasticsearch/jvm.options
ファイルに追加できます。
プロセスが実行されているときに実際の制限を確認します(短いですが)。
cat /proc/<pid>/limits
次のような行があります。
Limit Soft Limit Hard Limit Units
Max cpu time unlimited unlimited seconds
Max file size unlimited unlimited bytes
Max data size unlimited unlimited bytes
Max stack size 8388608 unlimited bytes
Max core file size 0 unlimited bytes
<truncated>
次に、ランナーまたはコンテナー(私の場合はスーパーバイザーのminfds値)に応じて、実際の制限構成を解除できます。
より一般的なケースについて少しヒントが得られることを願っています。