elasticsearch 8.2 启动失败,bug如下:
愿我们终有重逢之时,而你还记得我们曾经讨论的话题。
Q group 868373192
Q second group 277356808
warning: ignoring JAVA_HOME=/usr/lib/jvm/java-11; using bundled JDK
Exception in thread "main" java.lang.RuntimeException: starting java failed with [1]
output:
#
# There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 33235664896 bytes for committing reserved memory.
# An error report file with more information is saved as:
# logs/hs_err_pid3862221.log
error:
OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000001001000000, 33235664896, 0) failed; error='Not enough space' (errno=12)
at org.elasticsearch.tools.launchers.JvmOption.flagsFinal(JvmOption.java:114)
at org.elasticsearch.tools.launchers.JvmOption.findFinalOptions(JvmOption.java:79)
at org.elasticsearch.tools.launchers.JvmErgonomics.choose(JvmErgonomics.java:36)
at org.elasticsearch.tools.launchers.JvmOptionsParser.jvmOptions(JvmOptionsParser.java:136)
at org.elasticsearch.tools.launchers.JvmOptionsParser.main(JvmOptionsParser.java:87)
解决方法及方案:
从错误信息来看,Elasticsearch 8.2 启动失败的原因是 JVM 无法分配足够的内存。具体来说,JVM 尝试映射 33235664896 字节(约 31 GB)的内存,但系统没有足够的可用内存来完成这个操作。以下是一些可能的解决方案:
1. 增加系统内存
如果你有条件,可以考虑增加系统的物理内存或交换空间(swap)。Elasticsearch 通常需要大量的内存来运行,尤其是在处理大量数据时。
2. 减少 Elasticsearch 的内存使用
你可以通过调整 Elasticsearch 的 JVM 参数来减少内存使用。编辑 Elasticsearch 的配置文件 jvm.options
(通常位于 config
目录下),并调整以下参数:
-
-Xms
:设置 JVM 的初始堆内存大小。 -
-Xmx
:设置 JVM 的最大堆内存大小。
例如,你可以将这些值设置为较小的值:
-Xms4g -Xmx4g
这会将 JVM 的堆内存限制在 4 GB。你可以根据系统的可用内存和 Elasticsearch 的负载需求来调整这些值。
3. 检查系统内存使用情况
确保系统没有其他进程占用大量内存。你可以使用以下命令检查系统内存使用情况:
free -h
如果系统内存不足,可能需要关闭一些不必要的进程或服务。
4. 检查交换空间
确保系统有足够的交换空间。你可以使用以下命令检查交换空间:
swapon -s
如果交换空间不足,可以考虑增加交换空间。例如,在 Linux 系统上,你可以通过以下命令创建并启用交换文件:
sudo fallocate -l 4G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile
5. 检查 Elasticsearch 配置
确保 Elasticsearch 的配置文件(elasticsearch.yml
)中没有设置过高的内存相关参数。例如,indices.memory.index_buffer_size
和 indices.memory.min_index_buffer_size
等参数可能会影响内存使用。
6. 查看错误日志
错误信息中提到生成了一个错误日志文件 logs/hs_err_pid3862221.log
。你可以查看这个日志文件以获取更多详细信息,可能会有助于进一步诊断问题。
7. 使用 Elasticsearch 的默认配置
如果你不确定如何调整内存设置,可以尝试使用 Elasticsearch 的默认配置,看看是否能够启动。默认配置通常会根据系统的可用内存自动调整 JVM 参数。
8. 升级 Elasticsearch
如果你使用的是较旧的 Elasticsearch 版本,考虑升级到最新版本。新版本可能包含性能改进和 bug 修复,可能会解决你遇到的问题。
总结
Elasticsearch 启动失败通常与内存不足有关。通过调整 JVM 参数、增加系统内存或交换空间,以及检查系统资源使用情况,可以解决这个问题。如果问题仍然存在,建议查看详细的错误日志以获取更多信息。