Elasticsearchをアップデートした際に生成されるjvm.options.rpmnewの扱いとJVMのチューニング

Elasticsearchを5.2.1から5.3にアップデートした時の話。

before

[root@ip-*** home]# curl localhost:9200
{
  "name" : "***",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "***",
  "version" : {
    "number" : "5.2.1",
    "build_hash" : "***",
    "build_date" : "***",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

after

[root@ip-*** home]# curl localhost:9200
{
  "name" : "***",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "****",
  "version" : {
    "number" : "5.3.0",
    "build_hash" : "***",
    "build_date" : "***",
    "build_snapshot" : false,
    "lucene_version" : "6.4.1"
  },
  "tagline" : "You Know, for Search"
}

update後に/etc/elasticsearchを見て見ると、、

[root@ip-*** home]# cd /etc/elasticsearch
[root@ip-*** elasticsearch]# ll
total 32
-rw-rw---- 1 root elasticsearch 2878 Mar 29 07:22 elasticsearch.yml
-rw-rw---- 1 root elasticsearch 2896 Feb  7 08:54 jvm.options
-rw-rw---- 1 root elasticsearch 3117 Mar 23 03:34 jvm.options.rpmnew
-rw-rw---- 1 root elasticsearch 4456 Mar 23 03:34 log4j2.properties
drwxr-x--- 2 root elasticsearch 4096 Mar 23 03:34 scripts
-rw-r--r-- 1 root elasticsearch 2122 Feb  7 08:55 template.json
drwxr-x--- 2 root elasticsearch 4096 Mar 17 06:07 x-pack

となり、ここで発生した jvm.options.rpmnew というのは、新しいバージョンにおけるデフォルトの設定ファイルとなっています。 この新しいオプションは基本的に反映させておいた方が良さそうですね。

ここで新旧jvm.optionsのdiffを見てみます。

[root@ip-*** elasticsearch]# diff -u jvm.options jvm.options.rpmnew
--- jvm.options 2017-02-07 08:54:52.282685000 +0000
+++ jvm.options.rpmnew  2017-03-23 03:34:41.000000000 +0000
@@ -19,8 +19,8 @@
 # Xms represents the initial size of total heap space
 # Xmx represents the maximum size of total heap space

 ################################################################
 ## Expert settings
@@ -98,6 +98,13 @@
 # ensure the directory exists
 #-Xloggc:${loggc}

+# By default, the GC log file will not rotate.
+# By uncommenting the lines below, the GC log file
+# will be rotated every 128MB at most 32 times.
+#-XX:+UseGCLogFileRotation
+#-XX:NumberOfGCLogFiles=32
+#-XX:GCLogFileSize=128M
+
 # Elasticsearch 5.0.0 will throw an exception on unquoted field names in JSON.
 # If documents were already indexed with unquoted fields in a previous version
 # of Elasticsearch, some operations may throw errors.

diffを見る限り特に問題もなさそうですが、現状のオプションは残しておいたままにして新しい方を適用します。

$ cp jvm.options jvm.options.old
$ rm jvm.options
$ mv jvm.options.rpmnew jvm.options

ついでにヒープ領域の設定も変更

Elasticsearchのjvm.optionでは、デフォルトのXms及びXmxは2gですがインスタンスサイズの兼ね合いもあり、これを1gに変更します。

そして最後に再起動して設定が反映されます。

参考

1分でわかる.rpmnewの扱い方 · DQNEO起業日記

公式yumリポジトリで入れたElasticsearch 5.xの使用メモリを抑制するには - Qiita

JVMのチューニング - ITエンジニアとして生きる

「Java のヒープサイズ」についての簡単な説明