我在自己電腦Win10上裝了個Elasticsearch7.8愉适,可能因為版本過高侍咱,導(dǎo)致es對jdk要求也很高幅垮,而我電腦上jdk也只是1.8版本的,然后啟動的時候就報下面的警告:
Warning: with JDK 8 on Windows, Elasticsearch may be unable to derive correct
? ergonomic settings due to a JDK issue (JDK-8074459). Please use a newer
? version of Java.
Warning: MaxDirectMemorySize may have been miscalculated due to JDK-8074459.
? Please use a newer version of Java or set MaxDirectMemorySize explicitly.
這雖然只是個警告名眉,一般情況下訪問es也不會有什么問題,但是我用多線程頻繁訪問的時候就會報“遠(yuǎn)程主機(jī)強(qiáng)迫關(guān)閉了一個連接”錯誤凰棉。解決方式就是在配置文件中讓它用自己的jdk损拢,而不是用我們配好的環(huán)境變量的jdk。在bin/elasticsearch-env.bat文件中將if "%JAVA_HOME%" == "" (和它后面的else整個內(nèi)容注釋掉(es的配置中在每行的前面加rem撒犀,我也很奇怪用這么奇怪的注釋方式)福压,然后將if中的內(nèi)容提取出來就好了。下面是我的配置或舞。
set SCRIPT=%0
rem determine Elasticsearch home; to do this, we strip from the path until we
rem find bin, and then strip bin (there is an assumption here that there is no
rem nested directory under bin also named bin)
for %%I in (%SCRIPT%) do set ES_HOME=%%~dpI
:es_home_loop
for %%I in ("%ES_HOME:~1,-1%") do set DIRNAME=%%~nxI
if not "%DIRNAME%" == "bin" (
? for %%I in ("%ES_HOME%..") do set ES_HOME=%%~dpfI
? goto es_home_loop
)
for %%I in ("%ES_HOME%..") do set ES_HOME=%%~dpfI
rem now set the classpath
set ES_CLASSPATH=!ES_HOME!\lib\*
set HOSTNAME=%COMPUTERNAME%
if not defined ES_PATH_CONF (
? set ES_PATH_CONF=!ES_HOME!\config
)
rem now make ES_PATH_CONF absolute
for %%I in ("%ES_PATH_CONF%..") do set ES_PATH_CONF=%%~dpfI
set ES_DISTRIBUTION_FLAVOR=default
set ES_DISTRIBUTION_TYPE=zip
set ES_BUNDLED_JDK=true
cd /d "%ES_HOME%"
rem now set the path to java, pass "nojava" arg to skip setting JAVA_HOME and JAVA
if "%1" == "nojava" (
? exit /b
)
rem compariing to empty string makes this equivalent to bash -v check on env var
rem and allows to effectively force use of the bundled jdk when launching ES
rem by setting JAVA_HOME=
rem if "%JAVA_HOME%" == "" (
rem? set JAVA="%ES_HOME%\jdk\bin\java.exe"
rem? set JAVA_HOME="%ES_HOME%\jdk"
rem? set JAVA_TYPE=bundled jdk
rem ) else (
rem? set JAVA="%JAVA_HOME%\bin\java.exe"
rem? set JAVA_TYPE=JAVA_HOME
rem )
set JAVA="%ES_HOME%\jdk\bin\java.exe"
set JAVA_HOME="%ES_HOME%\jdk"
set JAVA_TYPE=bundled jdk
if not exist !JAVA! (
? echo "could not find java in !JAVA_TYPE! at !JAVA!" >&2
? exit /b 1
)
rem do not let JAVA_TOOL_OPTIONS slip in (as the JVM does by default)
if defined JAVA_TOOL_OPTIONS (
? echo warning: ignoring JAVA_TOOL_OPTIONS=%JAVA_TOOL_OPTIONS%
? set JAVA_TOOL_OPTIONS=
)
rem JAVA_OPTS is not a built-in JVM mechanism but some people think it is so we
rem warn them that we are not observing the value of %JAVA_OPTS%
if defined JAVA_OPTS (
? (echo|set /p=warning: ignoring JAVA_OPTS=%JAVA_OPTS%; )
? echo pass JVM parameters via ES_JAVA_OPTS
)
rem check the Java version
%JAVA% -cp "%ES_CLASSPATH%" "org.elasticsearch.tools.java_version_checker.JavaVersionChecker" || exit /b 1
如果是linux上也報這種警告隧膏,也在類似的配置文件中作相似的修改,我還沒有部署到linux上嚷那,就暫時不此問題的解決方案胞枕,需要的朋友可以自己試試。