Ubuntu 安装 Elasticsearch踩坑,遇到could not find java错误

环境变量问题

一开始jdk环境变量是这样配置的:

/etc/profile:

export JAVA_HOME=/usr/lib/java/jdk1.8.0_201/
export PATH=${JAVA_HOME}/bin:$PATH

启动ES报错:

 could not find java; set JAVA_HOME or ensure java is in PATH

怀疑环境变量级别不够,把环境变量加到系统级,修改 /etc/environment 文件(小心红色部分,否则后悔莫及):

环境变量文件加载说明:

/etc/profile : 在登录时,操作系统定制用户环境时使用的第一个文件 ,此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行。
/etc /environment : 在登录时操作系统使用的第二个文件, 系统在读取你自己的profile前,设置环境文件的环境变量。
~/.profile :  在登录时用到的第三个文件 是.profile文件,每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件。
/etc/bashrc : 为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bashrc : 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取。

 #/etc/environment

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"

export JAVA_HOME=/usr/lib/java/jdk1.8.0_201
export PATH=${JAVA_HOME}/bin:$PATH
 

 系统无法登录问题

执行 source /etc/environment后,结果成功入坑:系统无法登录

千万不要添加 export Path配置,把该配置直接写入PATH中

export PATH=${JAVA_HOME}/bin:$PATH

解决方法:

 进入登录界面时: CTRL+ALT+F1 或 CTRL+ALT+F2

通过设置临时变量解决问题 ,终端内输入命令(注意这部很关键,这样下来 vi 、sudo等工具便可以使用了):

export  PATH="/usr/local/sbin:/usr/local/bin:/usr/bin:/sbin:/bin:/usr/games"

然后vi /etc/environment 将  export PATH=${JAVA_HOME}/bin:$PATH 删除掉,重启就ok了

/etc/environment 最终配置为:

 

PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:$JAVA_HOME/bin"

export JAVA_HOME=/usr/lib/java/jdk1.8.0_201

root用户不能启动ES问题

再次启动ES

sudo ./elasticsearch

再次报错,不过这次是一个新的错误,看来Java配置已经起到作用了。

该错误是因为ES不允许root用户启动。

[2020-05-17T19:39:40,430][WARN ][o.e.b.ElasticsearchUncaughtExceptionHandler] [unknown] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:140) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:127) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124) ~[elasticsearch-cli-6.5.4.jar:6.5.4]
    at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86) ~[elasticsearch-6.5.4.jar:6.5.4]
Caused by: java.lang.RuntimeException: can not run elasticsearch as root
    at org.elasticsearch.bootstrap.Bootstrap.initializeNatives(Bootstrap.java:103) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:170) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:333) ~[elasticsearch-6.5.4.jar:6.5.4]
    at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:136) ~[elasticsearch-6.5.4.jar:6.5.4]
    ... 6 more
 

解决方案:

#把文件拥有者改为当前用户,在ES上一级目录执行命令(这里必须要改为拥有者,不能只赋权限,ES还需要在当天目录创建文件,要不然会报错):

sudo chown -R username:username elasticsearch-6.5.4

虚拟机内存不足问题

再次启动,报错:

Java HotSpot(TM) 64-Bit Server VM warning: INFO: os::commit_memory(0x00000000ca660000, 899284992, 0) failed; error='Cannot allocate memory' (errno=12)
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 899284992 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid3150.log
 

因为我用的虚拟机,只有2G内存,内存不够。修改配置文件 ES目录/config/jvm.options,改为256m

################################################################

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms256m
-Xmx256m

################################################################
 

 


 Ubuntu 安装 Elasticsearch踩坑,遇到could not find java错误

终于成功了,虚拟机还是有些弱,如果实在独立服务器启动,应该没有这么多坑。