Elasticsearchは、物理メモリが十分な場合、スワップを使わないようにする方がパフォーマンスが良くなります。 スワップを使用しない場合、Linuxのスワップを無効にするか、Elasticsearchの設定を変更してElasticsearchがスワップを使用しないようにする方法があります。
Elasticsearch 6.xでスワップを使用しないように設定
Elasticsearchではスワップを使用しないように設定することができます。 現在の設定は以下を実行して確認できます。
curl http://localhost:9200/_nodes/process?pretty
実際の結果は以下のようになり、"mlockall" が true になっていればスワップを使わない設定になっています。
# curl http://localhost:9200/_nodes/process?pretty
{
"_nodes" : {
"total" : 1,
"successful" : 1,
"failed" : 0
},
"cluster_name" : "elasticsearch",
"nodes" : {
"6v9cJJWbTTSvKpfsFxcRHQ" : {
"name" : "6v9cJJW",
"transport_address" : "127.0.0.1:9300",
"host" : "127.0.0.1",
"ip" : "127.0.0.1",
"version" : "6.3.1",
"build_flavor" : "default",
"build_type" : "rpm",
"build_hash" : "eb782d0",
"roles" : [
"master",
"data",
"ingest"
],
"attributes" : {
"ml.machine_memory" : "1040871424",
"xpack.installed" : "true",
"ml.max_open_jobs" : "20",
"ml.enabled" : "true"
},
"process" : {
"refresh_interval_in_millis" : 1000,
"id" : 7558,
"mlockall" : true
}
}
}
}
"mlockall" が false になっている場合は以下を参考に、設定ファイルを修正します。
elasticsearch.yml設定
"mlockall" をtrueにするために、以下の設定ファイルを修正します。
/etc/elasticesearch/elasticsearch.yml
elasticsearch.ymlには、以下のようなbootstrap.memory_lockをコメントアウトした箇所があります。
# bootstrap.memory_lock: true先頭の"#"を削除して、この設定を有効にします。
bootstrap.memory_lock: true
修正後、変更が反映するようにelasticsearchを再起動します。
# systemctl restart elasticsearch
Systemd設定
elasticsearch.ymlを修正して再起動しても"mlockall"がfalseのままなら、以下のページを参考にsystemdの設定を行います。
ます、以下のディレクトリが存在するかを確認します。 yumでインストールしたままだと、このディレクトリは無いので、無い場合はルート権限で作成します。
/etc/systemd/system/elasticsearch.service.d作成したら、このディレクトリ内に、override.conf というファイルを作成します。
# mkdir /etc/systemd/system/elasticsearch.service.d # vi /etc/systemd/system/elasticsearch.service.d/override.confファイルの中身は以下のようにします。
[Service] LimitMEMLOCK=infinity
override.confができたら、以下のコマンドを実行してsystemdに反映されるようにします。
systemcl daemon-reload反映後、elasticsearchを再起動します。再起動後、"mlockall" が trueになっていることを確認します。
# systemctl daemon-reload # systemctl restart elasticsearch
まだ "mlockall" が falseのままの場合は、以下のドキュメントを参考に設定におかしい箇所がないか確認して対処します。
Java VMヒープ設定
Elasticsearch 6では、JVMのヒープサイズ設定にES_HEAP_SIZEを使用することができません。 yumでインストールしている場合は、以下のファイルで設定します。
/etc/elasticsearch/jvm.options
Java VMのヒープサイズ設定は、"-Xms" と "-Xmx" に同じ値を指定します。 デフォルトでは以下のように1GBが指定されています。
################################################################ # Xms represents the initial size of total heap space # Xmx represents the maximum size of total heap space -Xms1g -Xmx1g
Elasticsearchでは全物理メモリの50%を越えないように設定するのが推奨されているようです。 物理メモリを確認して、以下のように "-Xms" と "-Xmx" に同じ値を指定します。
-Xms500m -Xmx500m
通常は /etc/elasticsearch/jvm.options で設定しますが、以下のファイルで設定することも可能です。
/etc/sysconfig/elasticsearchこの場合は、ES_JAVA_OPTSに、-Xms と -Xmx を指定します。
ES_JAVA_OPTS="-Xms400m -Xmx400m"
参考