Elasticsearch内存溢出错误 Java堆空间

37

我正在运行一台8核、32G RAM的elasticsearch节点,拥有5个分片和4亿(小型)文档。

所有东西工作得很好,直到我运行一个聚合搜索,然后分片出现故障:

java.lang.OutOfMemoryError: Java heap space

我已经使用以下命令更改了堆大小:

export ES_HEAP_SIZE=16g(同时将ES_MAX_MEMES_MIN_MEM设置为相同)

还修改了elasticsearch的yml文件:

bootstrap.mlockall: true

甚至(安装文档推荐):

sudo sysctl -w vm.max_map_count=262144

重新启动服务后仍然没有改善,仍然会出现 java.lang.OutOfMemoryError: Java heap space 错误。

除了不运行聚合查询之外,还有其他建议吗?

查询是:

https://localhost:9200/my_index_name/_search?search_type=count
{
  "aggs": {
    "distinct_hostname": {
      "cardinality": {
        "field": "hostname"
      }
    }
  }
}

你运行的是哪个版本?你正在运行哪个聚合查询?是否有可能通过过滤器限制放入聚合结果的文档数量? - Jettro Coenradie
版本:1.1.1,构建:f1585f0,JVM:1.7.0_72 - B.P
聚合查询是针对每个文档中存在的字段进行的。该查询试图计算此字段内容的唯一实例数。限制其运行会使结果失真。我不预计经常运行此查询,也不介意它运行缓慢。但是当分片失败时,我会得到不一致的结果。 - B.P
你看过这个吗?http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/_limiting_memory_usage.html#fielddata-size - Felipe
请查看此处 https://www.elastic.co/guide/en/elasticsearch/guide/current/heap-sizing.html - Bogdan Alexandru Militaru
3个回答

27

我想我已经找到了错误原因。我使用 'service' 启动 Elasticsearch,因此我的环境变量被删除了。我必须更新 /etc/default/elasticsearch 文件中的正确环境变量(特别是 ES_HEAP_SIZE=16g)。

到目前为止,它运行良好,应用程序没有出现错误。


18

更新Elasticsearch 5的Java堆大小的正确方法不是使用EXPORT _JAVA_OPTIONSEXPORT ES_HEAP_SIZE或使用命令行参数。据我所知,所有这些都被您Elasticsearch安装目录中的配置文件config/jvm.options覆盖。要更改这些设置,您需要编辑该文件中的这些行:

# Xms represents the initial size of total heap space
# Xmx represents the maximum size of total heap space

-Xms2g
-Xmx2g

4
针对 Windows 用户的提示:在安装 Elasticsearch 服务时,jvm.options 用于确定 Java 选项,但在此之后,对 jvm.options 的任何更改都不会生效,直到您重新创建服务。请注意不要改变原来的意思。 - qbik
在 Elasticsearch 2.3.3 上,我不得不设置 ES_HEAP_SIZEES_JAVA_OPTS 两者才能得到除默认值之外的任何值。这意味着我不需要使用 config/jvm.options - eebbesen

0

虽然这是一个老问题,但以下是如何在较新版本的ELK(Elasticsearch、Kibana、Logstash)(v 5.0+)中解决此问题:

配置您的jvm.options文件以在堆上分配更多内存。
您需要配置的选项是-Xms-Xmx选项,默认设置为1 GB RAM(-Xms1G-Xmx1G)。建议大小不超过系统RAM的一半。例如,在具有32GB RAM的PC上,您将设置以下内容:-Xms16G-Xmx16G

大多数ELK安装的此文件位于/etc/elasticsearch/jvm.options

文档提供了更详细的信息:https://www.elastic.co/guide/en/elasticsearch/reference/master/advanced-configuration.html#set-jvm-heap-size


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接