我尝试在我的本地Ubuntu计算机上按照以下指南安装 elasticsearch :
https://www.elastic.co/guide/en/elasticsearch/reference/current/_installation.html
,当尝试运行' ./ elasticsearch'时,出现以下错误:
Java HotSpot(TM) 64-Bit Server VM warning: INFO: <br>
os::commit_memory(0x00007f0e50cc0000, 64075595776, 0) failed; <br>
error='Cannot allocate memory' (errno=12) <br>
There is insufficient memory for the Java Runtime Environment to continue.<br>
Native memory allocation (mmap) failed to map 64075595776 bytes for committing reserved memory
这是记忆统计数据:
total used free shared buffers cached
Mem: 8113208 4104900 4008308 44244 318076 1926964
-/+ buffers/cache: 1859860 6253348
Swap: 7812092 0 7812092
来自日志的错误消息:
There is insufficient memory for the Java Runtime Environment to continue.
# Native memory allocation (mmap) failed to map 64075595776 bytes for committing reserved memory.
# Possible reasons:
# The system is out of physical RAM or swap space
# In 32 bit mode, the process size limit was hit
# Possible solutions:
# Reduce memory load on the system
# Increase physical memory or swap space
# Check if swap backing store is full
# Use 64 bit Java on a 64 bit OS
# Decrease Java heap size (-Xmx/-Xms)
# Decrease number of Java threads
# Decrease Java thread stack sizes (-Xss)
# Set larger code cache with -XX:ReservedCodeCacheSize=
# This output file may be truncated or incomplete.
#
# Out of Memory Error (os_linux.cpp:2627), pid=13021, tid=139764129740544
#
# JRE version: (8.0_66-b17) (build )
# Java VM: Java HotSpot(TM) 64-Bit Server VM (25.66-b17 mixed mode linux-amd64 )
# Failed to write core dump. Core dumps have been disabled. To enable core dumping, try "ulimit -c unlimited" before starting Java again
已经尝试过早期版本,使用apt从存储库安装,没有任何效果。
任何人都知道可能出现什么问题?
答案 0 :(得分:11)
您似乎正在尝试使用默认选项启动ElasticSearch,默认选项会尝试将堆栈大小设置为2Go。如果你没有那个免费的... kaboom(默默地)。
查看/etc/elasticsearch/jvm.options
并修改行:
-Xms2g
-Xmx2g
适合您可用内存的东西。但请注意,ElasticSearch是一个伟大的大记忆,并希望一切。您可能无法在2Go限制下获得有用的系统。
答案 1 :(得分:2)
首先,Elasticsearch使用混合mmapfs / niofs目录。操作系统对mmap计数进行限制,通常默认值为65536.这可能导致内存不足异常。 在Linux上,您可以通过以root身份运行以下命令来增加此默认内核值:
sysctl -w vm.max_map_count=262144
或永久更新 /etc/sysctl.conf 中的vm.max_map_count设置。您也可以通过以下命令进行更改:
echo 262144 > /proc/sys/vm/max_map_count
有关详细信息,请查看Linux kernel documentation:
max_map_count: 此文件包含进程可能具有的最大内存映射区域数。内存映射区域用作调用malloc的副作用,直接通过mmap和mprotect,以及加载共享库时。 虽然大多数应用程序需要少于一千个映射,但某些程序(尤其是malloc调试器)可能消耗大量的映射,例如每个分配最多一个或两个映射。 默认值为65536。
您应该考虑的第二件事是JVM最小堆大小和最大堆大小。您可以在 /etc/elasticsearch/jvm.options 中更改计算机上的此值。要选择合适的值,您可以在Elastic set JVM heap size page上找到良好的拇指规则。
答案 2 :(得分:0)
这个answer为我工作。
我通过更改以下值
来更改了总堆空间的初始大小和总堆空间的最大大小/etc/elasticsearch/jvm.options
来自
-Xms1g
-Xmx1g
致
-Xms256m
-Xmx256m
答案 3 :(得分:0)
编辑jvm.options
:
sudo nano /etc/elasticsearch/jvm.options
更改JVM
堆大小
来自
Xms2g
Xmx2g
到
Xms200m
Xmx200m
原因:Elastic Search试图分配必然会失败的 2GB 堆大小(默认情况下)。因此,我们将其更改为 200mb 。