web-dev-qa-db-ja.com

Elasticsearchプロセスのメモリロックに失敗しました

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
6
Shades88

これは、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がロックされ、パフォーマンスが大幅に向上することに気付くはずです。

21
ugosan
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/ )。この事実は簡単に確認できます。

  1. /etc/security/limits.confで設定

    elasticsearch-memlock無制限

  2. elasticsearchの最大ロックメモリが無制限であることを確認してください

    $ Sudo su elasticsearch -s/bin/bash $ ulimit -l

  3. bootstrap.memory_lockを無効にします:/etc/elasticsearch/elasticsearch.ymlでtrue

    #bootstrap.memory_lock:true

  4. systemd経由でelasticsearchのサービスを開始

    #service elasticsearch start

  5. 開始後、サービスelasticsearchの最大メモリロック設定を確認してください

    #systemctl show elasticsearch | grep -i limitmemlock

ああ、神様! ulimitを介して無制限の最大memlockサイズを設定しましたが、systemdはそれを完全に無視します。

LimitMEMLOCK=65536

それで、結論に達します。有効にしたsystemdを介してelasticsearchを開始するには

bootstrap.memory_lock:true

ulimitの設定を気にする必要はありませんが、systemdの設定ファイルで明示的に設定する必要があります。

話の終わり。

2
Alex

/ etc/sysconfig/elasticsearchファイルセットで設定してみてくださいMAX_LOCKED_MEMORY = unlimited

in/ usr/lib/systemd/system/elasticsearch.serviceset LimitMEMLOCK = infinity

1
Viraj Parab

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で開始します(開始メカニズムに応じて調整します)。

0
dr0i

フォロー この投稿 elasticsearch6.xを使用したubuntu18.04では、ファイルLimitMEMLOCK=infinityにエントリ/usr/lib/systemd/system/elasticsearch.serviceがありませんでした。

そのため、そのファイルにそれを追加し、MAX_LOCKED_MEMORY=unlimited/etc/default/elasticsearchを設定することでうまくいきました。

Jvmオプションは/etc/elasticsearch/jvm.optionsファイルに追加できます。

0
Autodidact

プロセスが実行されているときに実際の制限を確認します(短いですが)。

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値)に応じて、実際の制限構成を解除できます。

より一般的なケースについて少しヒントが得られることを願っています。

0
Ardhi