从Elasticsearch 7.0开始,据说OpenJDK已经捆绑在其中了
太长不看
-
- Elasticsearchは、7.0からOpenJDKをバンドルするようになっている
-
- バンドルされているOpenJDKは、AdoptOpenJDKの模様
-
- デフォルトでは、バンドルされているOpenJDKで起動する
- 変更したい場合は、JAVA_HOMEを設定する
顺便说一下,Logstash并未捆绑OpenJDK。
文件和发布说明
当我用CentOS的yum命令安装Elasticsearch时,我突然意识到它是使用已安装的JDK在内部进行启动的。
当阅读文件时,似乎发现它捆绑了OpenJDK。
使用RPM安装Elasticsearch
Elasticsearch 包含了来自 JDK 维护者的 OpenJDK 的捆绑版本(GPLv2+CE)。如果想使用自己的 Java 版本,请参考 JVM 的版本要求。
听起来好像是7.0版本。
发行说明/Elasticsearch版本7.0.0
在分发中捆绑Java
看到这个Pull Request,好像是因为不喜欢设置的麻烦和旧版JDK所导致可能出现的问题。
将Java打包到分发中
如果要使用自行准备的JDK,请将其指定到环境变量JAVA_HOME中即可。
设置自定义的Java路径以供使用。
设置Elasticsearch配置
在运行Elasticsearch时,使用捆绑的Java开发工具包。可以通过在/etc/sysconfig/elasticsearch中设置JAVA_HOME环境变量来覆盖。
RPM的目录布局
我要確認一下
我们来实际确认一下。
这次的环境是这里。
$ cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
安装Elasticsearch。
首先,我们根据文件的指导来安装Elasticsearch。
使用RPM安装Elasticsearch
$ 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。
支持矩阵/产品和JVM
切换Elasticsearch使用的Java版本。
在这里,我将尝试切换到自行安装的OpenJDK,而不是捆绑的AdoptOpenJDK。
自己安装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。
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