解決Elasticsearch因jdk版本問題啟動失敗的問題

Elasticsearch2.4版本,在Linux機器上啟動報如下錯誤:

Exception in thread "main" java.lang.RuntimeException: Java version: Oracle Corporation 1.7.0_45 [OpenJDK 64-Bit Server VM 24.45-b08] suffers from critical bug https://bugs.openjdk.java.net/browse/JDK-8024830 which can cause data corruption.
Please upgrade the JVM, see http://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html for current recommendations.
If you absolutely cannot upgrade, please add -XX:-UseSuperWord to the JAVA_OPTS environment variable.
Upgrading is preferred, this workaround will result in degraded performance.
        at org.elasticsearch.bootstrap.JVMCheck.check(JVMCheck.java:123)
        at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:284)
        at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:45)
Refer to the log for complete error details.

看網上有說Linux自帶的OpenJDK和新裝的JDK可能會有沖突(跟Elasticsearch無關的文章),不知道和這個有沒有沒關系。

我的機器java -version如下,這算沖突嗎?我也不清楚。

java version "1.7.0_45"
OpenJDK Runtime Environment (rhel-2.4.3.3.el6-x86_64 u45-b15)
OpenJDK 64-Bit Server VM (build 24.45-b08, mixed mode)

本來打算試一試刪掉OpenJDK安裝JDK7的,當時上官網下載Linux版JDK7時發現竟然要下載三個多小時,下載這個不知道為什麼這麼慢。

等JDK7時,我看報錯信息裡please add -XX:-UseSuperWord to the JAVA_OPTS environment variable讓我配置環境變量,那我配一下也無妨。

在終端上輸入

export JAVA_OPTS=$JAVA_OPTS-XX:-UseSuperWord

然後啟動Elasticsearch,成瞭。

上邊那句隻在當前用戶下生效,關閉終端或者退出用戶後,即使再次登錄,環境變量也失效瞭。機器不是我的,我沒有root權限改環境變量。

一不做二不休,我在Elasticsearch的啟動文件/bin/elasticsearch裡加上這行,這樣每次啟動就沒問題瞭。

截圖如下

解決ElasticSearch找不到JDK問題

Could not find any executable java binary.Please install java in your PATH

背景:

本地啟動ElasticSearch服務提示找不到JDK或JRE,提示Could not find any executable java binary. Please install java in your PATH or set JAVA_HOME.

但是本地已經安裝瞭jdk,並且已經配置瞭環境變量,但是為什麼還是有問題,答案是不要把環境變量設置到bin目錄。

解決方案:

設置環境變量JAVA_HOME,但是註意不要設置到\bin這個級別的目錄

  • JAVA_HOME:C:\Program Files (x86)\Java\jdk1.8.0_91\bin (錯誤)
  • JAVA_HOME:C:\Program Files (x86)\Java\jdk1.8.0_91 (正確)

原因:

啟動文件中的elasticsearch文件中,會自動去找JAVA_HOME這個變量下的bin,如下圖,如果設置瞭JAVA_HOME這個變量到bin路徑,就會有重復,導致ElasticSearch啟動找不到jdk變量。

以上為個人經驗,希望能給大傢一個參考,也希望大傢多多支持WalkonNet。

推薦閱讀: