LoginSignup
10
5

More than 3 years have passed since last update.

Elasticsearch 7.0から、OpenJDKがバンドルされるようになっていたという話

Posted at

TL;DR

  • Elasticsearchは、7.0からOpenJDKをバンドルするようになっている
  • バンドルされているOpenJDKは、AdoptOpenJDKの模様
  • デフォルトでは、バンドルされているOpenJDKで起動する
  • 変更したい場合は、JAVA_HOMEを設定する

ちなみに、LogstashにはOpenJDKがバンドルされていません

ドキュメントとリリースノート

CentOSにyumでElasticsearchをインストールした時に、インストールしたパッケージ内部で持っているJDKで起動しているのに、ふと気づきました。

ドキュメントを読んでみると、どうやらOpenJDKをバンドルしているようです。

Install Elasticsearch with RPM

Elasticsearch includes a bundled version of OpenJDK from the JDK maintainers (GPLv2+CE). To use your own version of Java, see the JVM version requirements

7.0からみたいですね。

Release Notes/ Elasticsearch version 7.0.0

Bundle java in distributions

Pull Requestを見ると、セットアップの手間、古いJDKが入っている環境の場合に引き起こされる問題を嫌ったようですね。

Bundle java in distributions

自分で用意したJDKを使用する場合は、環境変数JAVA_HOMEに指定すればよいみたいです。

Set a custom Java path to be used.

Configuring Elasticsearch

The bundled Java Development Kit used to run Elasticsearch. Can be overriden by setting the JAVA_HOME environment variable in /etc/sysconfig/elasticsearch

Directory layout of RPM

確認してみる

実際に、確認してみましょう。

今回の環境は、こちら。

$ cat /etc/redhat-release 
CentOS Linux release 7.6.1810 (Core)

Elasticsearchをインストールする

まずは、ドキュメントに沿ってElasticsearchをインストールしてみます。

Install Elasticsearch with RPM

$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
$ sudo vim /etc/yum.repos.d/elasticsearch.repo
$ sudo yum install --enablerepo=elasticsearch elasticsearch

作成した/etc/yum.repos.d/elasticsearch.repoの中身は、こちら。

[elasticsearch]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=0
autorefresh=1
type=rpm-md

Elasticsearchを起動。

$ sudo systemctl start elasticsearch

ここで、Elasticsearchの起動に使われているJavaを見てみます。

$ ps -ef | grep java | grep -v grep
elastic+ 24025     1 39 05:49 ?        00:00:23 /usr/share/elasticsearch/jdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=COMPAT -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.io.tmpdir=/tmp/elasticsearch-5336255756681085720 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m -XX:MaxDirectMemorySize=536870912 -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -Des.bundled_jdk=true -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet

ElasticsearchにバンドルされているJavaで動作しています。

バンドルされているのは、AdoptOpenJDKみたいですね。

$ /usr/share/elasticsearch/jdk/bin/java --version
openjdk 13.0.1 2019-10-15
OpenJDK Runtime Environment AdoptOpenJDK (build 13.0.1+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 13.0.1+9, mixed mode, sharing)

しかも、13…。

サポートされている範囲ではありますが、LTSなOpenJDKを使いたい人もいるでしょう。

Support Matrix / Product and JVM

Elasticsearchが使うJavaを切り替える

ここで、バンドルされているAdoptOpenJDKではなく、自前でインストールしたOpenJDKに切り替えてみます。

自分でOpenJDKをインストール。

$ sudo yum install java-11-openjdk-devel
$ java --version
openjdk 11.0.5 2019-10-15 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.5+10-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.5+10-LTS, mixed mode, sharing)

このOpenJDKは、このままではElasticsearchに使ってもらえないので、設定を変更します。

こちらを見て、JAVA_HOME/usr/lib/jvm/java-11-openjdkで指定することにしましょう。

Directory layout of RPM

$ ll /usr/lib/jvm
total 0
lrwxrwxrwx. 1 root root 26 Dec 13 06:00 java -> /etc/alternatives/java_sdk
lrwxrwxrwx. 1 root root 29 Dec 13 06:00 java-11 -> /etc/alternatives/java_sdk_11
lrwxrwxrwx. 1 root root 37 Dec 13 06:00 java-11-openjdk -> /etc/alternatives/java_sdk_11_openjdk
drwxr-xr-x. 8 root root 97 Dec 13 06:00 java-11-openjdk-11.0.5.10-0.el7_7.x86_64
lrwxrwxrwx. 1 root root 34 Dec 13 06:00 java-openjdk -> /etc/alternatives/java_sdk_openjdk
lrwxrwxrwx. 1 root root 21 Dec 13 06:00 jre -> /etc/alternatives/jre
lrwxrwxrwx. 1 root root 24 Dec 13 06:00 jre-11 -> /etc/alternatives/jre_11
lrwxrwxrwx. 1 root root 32 Dec 13 06:00 jre-11-openjdk -> /etc/alternatives/jre_11_openjdk
lrwxrwxrwx. 1 root root 40 Dec 13 06:00 jre-11-openjdk-11.0.5.10-0.el7_7.x86_64 -> java-11-openjdk-11.0.5.10-0.el7_7.x86_64
lrwxrwxrwx. 1 root root 29 Dec 13 06:00 jre-openjdk -> /etc/alternatives/jre_openjdk

/etc/sysconfig/elasticsearchを設定。

# Elasticsearch Java path
#JAVA_HOME=

JAVA_HOMEに、使いたいJavaを設定します。

# Elasticsearch Java path
JAVA_HOME=/usr/lib/jvm/java-11-openjdk

Elasticsearchを再起動。

$ sudo systemctl restart elasticsearch

これで、自分でインストールしたOpenJDKが使われるようになりました。

$ ps -ef | grep java | grep -v grep
elastic+ 24695     1 83 06:08 ?        00:00:23 /usr/lib/jvm/java-11-openjdk/bin/java -Des.networkaddress.cache.ttl=60 -Des.networkaddress.cache.negative.ttl=10 -XX:+AlwaysPreTouch -Xss1m -Djava.awt.headless=true -Dfile.encoding=UTF-8 -Djna.nosys=true -XX:-OmitStackTraceInFastThrow -Dio.netty.noUnsafe=true -Dio.netty.noKeySetOptimization=true -Dio.netty.recycler.maxCapacityPerThread=0 -Dio.netty.allocator.numDirectArenas=0 -Dlog4j.shutdownHookEnabled=false -Dlog4j2.disable.jmx=true -Djava.locale.providers=COMPAT -Xms1g -Xmx1g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -Djava.io.tmpdir=/tmp/elasticsearch-586651067490676884 -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/var/lib/elasticsearch -XX:ErrorFile=/var/log/elasticsearch/hs_err_pid%p.log -Xlog:gc*,gc+age=trace,safepoint:file=/var/log/elasticsearch/gc.log:utctime,pid,tags:filecount=32,filesize=64m -XX:MaxDirectMemorySize=536870912 -Des.path.home=/usr/share/elasticsearch -Des.path.conf=/etc/elasticsearch -Des.distribution.flavor=default -Des.distribution.type=rpm -Des.bundled_jdk=true -cp /usr/share/elasticsearch/lib/* org.elasticsearch.bootstrap.Elasticsearch -p /var/run/elasticsearch/elasticsearch.pid --quiet
10
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10
5