ElasticSearchでmlockall:trueが効かない時にチェックすること
ElasticSearchって日本語の情報少なくて辛いです。
今回はmlockall:trueの設定が効かなかった時のチェック項目を残しておきます。
mlockall:trueとは
ElasticSearchは公式で「起動時にメモリを確保し、スワップしないようにする」という設定が推奨されています。
※参照:Configuration
まず起動時にメモリを確保するためには、/etc/sysconfig/elasticsearch
でES_HEAP_SIZE
を設定する必要があります。(公式では実メモリの半分程度、32GBを超えないようにと言ってます)
そしてElasticSearchのメモリがスワップしないようにするために、/etc/elasticsearch/elasticsearch.yml
でbootstrap.mlockall: true
を記述する必要があります。
以上の設定をした後でelasticsearchを再起動すれば普通は設定が反映されます。
http://localhost::9200/_nodes/process?pretty
を見てmlockallがtrueになっているかを確認しましょう。
はい、trueになってませんね。これでtrueになった人はここから下は読まなくて大丈夫です。
mlockall:trueの設定が効かない時
まずは/etc/sysconfig/elasticsearch
でMAX_LOCKED_MEMORY=unlimited
が記述されているか確認します。
これで大抵の場合はtrueになるはずなのですが、CentOS7などでsystemd運用をしている場合、それに加えて/etc/systemd/system/elasticsearch.service
でLimitMEMLOCK=infinity
の記述を入れる必要があるようです。
/etc/systemd/system/elasticsearch.service
の雛形は/usr/lib/systemd/system/elasticsearch.service
から持ってくる
以上の設定を入れたらsystemctl daemon-reload
を打った後にelasticsearchを再起動してください。
僕の場合はそれで無事にmlockallがtrueになりました。
自分の知識不足もありますが、OSS触ってるとこれほんとに解決すんのみたいな事がよくあって楽しいですね。