サナギわさわさ.json

サナギさんとキルミーベイベーとプログラミングが好きです

ElasticSearchでmlockall:trueが効かない時にチェックすること

ElasticSearchって日本語の情報少なくて辛いです。
今回はmlockall:trueの設定が効かなかった時のチェック項目を残しておきます。

mlockall:trueとは

ElasticSearchは公式で「起動時にメモリを確保し、スワップしないようにする」という設定が推奨されています。
※参照:Configuration

まず起動時にメモリを確保するためには、/etc/sysconfig/elasticsearchES_HEAP_SIZEを設定する必要があります。(公式では実メモリの半分程度、32GBを超えないようにと言ってます)
そしてElasticSearchのメモリがスワップしないようにするために、/etc/elasticsearch/elasticsearch.ymlbootstrap.mlockall: trueを記述する必要があります。

以上の設定をした後でelasticsearchを再起動すれば普通は設定が反映されます。
http://localhost::9200/_nodes/process?pretty を見てmlockallがtrueになっているかを確認しましょう。

f:id:kakakazuma:20150312013439p:plain

はい、trueになってませんね。これでtrueになった人はここから下は読まなくて大丈夫です。

mlockall:trueの設定が効かない時

まずは/etc/sysconfig/elasticsearchMAX_LOCKED_MEMORY=unlimitedが記述されているか確認します。

これで大抵の場合はtrueになるはずなのですが、CentOS7などでsystemd運用をしている場合、それに加えて/etc/systemd/system/elasticsearch.serviceLimitMEMLOCK=infinityの記述を入れる必要があるようです。
/etc/systemd/system/elasticsearch.serviceの雛形は/usr/lib/systemd/system/elasticsearch.serviceから持ってくる

以上の設定を入れたらsystemctl daemon-reloadを打った後にelasticsearchを再起動してください。
僕の場合はそれで無事にmlockallがtrueになりました。

自分の知識不足もありますが、OSS触ってるとこれほんとに解決すんのみたいな事がよくあって楽しいですね。