环境变量问题
一开始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################################################################
再次启动:
终于成功了。