Elasticsearchのメモリ使用量を減らす

2017年2月20日

Elasticsearchのメモリ使用量を減らす

ログ可視化ツールの 3 点セット、Fluentd + Elasticsearch5 + Kibana5 を試すメモ 5 回目。前回は Elasticsearch に登録されてから一定期間を過ぎたログを自動的に削除するところをやりました。

Curator4で古いインデックス削除
Curator4でElasticsearch5の古いインデックスを削除する

ログ可視化ツールの 3 点セット、Fluentd + Elasticsearch5 + Kibana5 を試すメモ 4 ...

続きを見る

これまでの状態で Elasticsearch をしばらく動作させていると、Kibana が応答しなくなる現象が発生しました。調べてみると Kibana ではなく Elasticsearch がメモリ不足で落ちている様子。Elasticsearch を動作させているマシンのメモリは 2GB。

低スペックのサーバでも動作させられるように Elasticsearch のメモリ使用量を減らす方法を調べました。

目次

  1. Elasticsearch のデフォルトのメモリ使用量は 2GB くらい
  2. Java VM のヒープサイズを調整する
  3. インデックスのキャッシュ量を調整する(未設定)

Elasticsearch のデフォルトのメモリ使用量は 2GB くらい

elasticsearch マシンのメモリを一時的に 4GB に増やして Elasticsearch のメモリ使用量を調べてみると、起動直後のメモリ使用量は 2.2GB でした。

$ top

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1052 elastic+  20   0 4786684 2.265g  15536 S   1.3 61.2   0:18.20 java

Java VM のヒープサイズを調整する

Set JVM heap size via jvm.options | Elasticsearch Reference によると、Java のヒープサイズは搭載メモリの 50% 以下にするのがよいとのこと。

Set Xmx to no more than 50% of your physical RAM, to ensure that there is enough physical RAM left for kernel file system caches.

Java のヒープサイズといえば起動オプションの Xms や Xmx ですね。起動オプションを指定する方法は Configuring system settings | Elasticsearch Reference に書かれています。

/etc/elasticsearch/jvm.options (when installing from the Debian or RPM packages). This file contains a line-delimited list of JVM arguments, which must begin with -. You can add custom JVM flags to this file and check this configuration into your version control system.

/etc/elasticsearch/jvm.options の Xms と Xmx を 1GB に変更します。

jvm.options

################################################################
## IMPORTANT: JVM heap size
################################################################
##
## You should always set the min and max JVM heap
## size to the same value. For example, to set
## the heap to 4 GB, set:
##
## -Xms4g
## -Xmx4g
##
## See https://www.elastic.co/guide/en/elasticsearch/reference/current/heap-size.html
## for more information
##
################################################################
# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space
-Xms1g
-Xmx1g

Elasticsearch 再起動

$ sudo systemctl restart elasticsearch.service

メモリ使用量が 1.2GB に減っています

$ top

 PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND
1043 elastic+  20   0 3720344 1.253g  15556 S   1.7 33.8   0:19.78 java

インデックスのキャッシュ量を調整する(未設定)

Fielddata | Elasticsearch Reference によると、インデックスのキャッシュは高速化のためメモリに乗るようです。

The field data cache is used mainly when sorting on or computing aggregations on a field. It loads all the field values to memory in order to provide fast document based access to those values. The field data cache can be expensive to build for a field, so its recommended to have enough memory to allocate it, and to keep it loaded.

今回はメモリ使用量に余裕があったので設定しませんでしたが、今後メモリ使用量が増えていくようであれば、上記リンクにある indices.fielddata.cache.size パラメータや Circuit Breaker の設定を確認しようと思います。

次回は firewalld まわりをやります

Elastic Stack firewalld
Fluentd + Elasticsearch5 + Kibana5構築(6) firewalld設定編

ログ可視化ツールの 3 点セット、Fluentd + Elasticsearch5 + Kibana5 を試すメモ 6 ...

続きを見る

-技術ブログ
-