OpenJDK 64-Bit Server VM warning: INFO: os::commit_memory(0x0000001001000000, 33235664896, 0) failed

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 参数、增加系统内存或交换空间,以及检查系统资源使用情况,可以解决这个问题。如果问题仍然存在,建议查看详细的错误日志以获取更多信息。

猜你喜欢

转载自blog.csdn.net/SPESEG/article/details/143436298