elasticsearch中java lang outofmemoryerror java heap space背后的可能原因是什么

What are the possible reasons behind the java lang outofmemoryerror java heap space in elasticsearch

我在 elasticsearch 中看到了很多 java lang outofmemoryerror java heap space 但我可以找到任何帮助页面来描述弹性搜索中这些错误背后的可能原因。我收到错误,例如:

(2015-04-09 13:56:47,527 DEBUGaction.index Emil Blonsky observer: timeout notification from cluster service. timeout setting 1m, time since start 1m) Caused by: java.lang.OutOfMemoryError: Java heap space:

我不能直接回答你的问题,但我过去发现有几种解决此类问题的方法很有用:

  1. 使用 JVisualVM 检查堆的内容。 JVisualVM 是 JDK 附带的免费工具。它允许您检查 运行 JVM 的详细信息,包括堆的完整转储。

  2. 如果您怀疑错误仅仅是由于 JVM 没有足够的可用内存,您可以通过堆参数手动增加它 reference.

可能的原因(部分原因):

  1. 将太多数据放入该内存,尤其是因为字段数据(主要用于排序、聚合)
  2. 配置错误,您认为您为堆大小设置了一些东西,但它是错误的或在错误的位置,并且您的节点以默认值启动并且该值(最小 256MB,最大 1GB)是不够的
  3. 由于非常繁重的索引而放置了太多数据,例如太大的批量大小
  4. 使用非常大的查询(取决于您有多少内存,但是 20 亿肯定会使集群崩溃)"size"
  5. 特别是对于没有足够内存的主节点(符合主节点资格的节点)——集群状态可能是罪魁祸首。如果为每个索引定义了很多别名,集群状态会变得非常大。

一个 OOMed 节点需要重新启动,顺便说一句。