当前位置: 首页 > 知识库问答 >
问题:

Elasticsearch 1.5.2 2 个节点中的高 JVM 堆,即使没有批量索引

上官砚文
2023-03-14

我们最近面临着多次停机,尤其是在批量索引几个小时之后。为了避免进一步的停机时间,我们暂时禁用了批量索引并添加了另一个节点。现在停机时间已停止,但 6 个节点中的两个永久保留在 JVM 堆中

我们目前有一个 6 节点集群(以前是 5 个),每个集群都是 EC2 c3.2xlarge,具有 16 GB 内存、8 GB JVM 堆,所有主数据。我们使用的是 Elasticsearch 1.5.2,它有已知的问题,如 [OOM 抛出在合并线程上](https://issues.apache.org/jira/browse/LUCENE-6670 OOM 抛出在合并线程上),我们经常遇到同样的问题。

搜索和自动建议有两个主要索引,其文档计数/大小如下所示:

运行状况索引 pri 代表 docs.count docs.delete store.size
绿色开放聚合 5 0 16507117 3653185 46.2GB 绿色开放 index_v10 5 0 3445495 693572 44.8GB

理想情况下,我们为每个索引至少保留一个副本,但我们上次尝试添加具有 5 个节点的副本会导致 OOM 错误和堆满,因此我们将其转回 0。我们还在上午 12-6 点之间运行了两个批量更新作业,每个作业每天更新大约 300 万个包含 2-3 个字段的文档。他们计划在凌晨 1:30 和 4:30,每个都使用 bash 脚本向 BULK API 发送包含 100 个文档(大小约为 12 KB)的批量提要,每个脚本之间的睡眠时间为 .25 秒,以避免过多的并行请求。当我们开始批量更新时,我们每天最多更新 200 万个文档,但文档在短时间内几乎翻了一番(达到 380 万),我们开始看到搜索响应时间峰值主要在凌晨 4 点到 6 点之间,有时甚至更晚。我们的平均搜索响应时间也从 60-70 毫秒增加到 150 毫秒。一周前,master 由于 ping 超时而离开,不久之后我们收到了一个索引的分片失败错误。在进一步调查时,我们发现无法访问此特定分片的数据。为了避免数据的不可用,我们重新启动了节点并重新索引了数据。

但是,节点停机发生了很多次,每次分片都进入未分配或正在初始化状态。我们最终删除了索引并重新开始。但是,繁重的索引再次带来了内存不足错误和节点停机,以及相同的分片问题和数据丢失。为了避免进一步的停机,我们停止了所有批量作业,并以非常慢的速度重新索引数据。

我们还添加了一个节点来分配负载。然而,目前我们有 3 个节点,JVM 始终高于 75%,2 个始终为 80%。我们注意到这些节点上的段数及其大小相对较高(约 5 GB),但对这些节点使用优化索引可能会再次增加堆,并有可能停机。

另一个需要注意的重要点是,我们的tomcat应用程序只命中了所有节点中的3个(用于正常搜索和索引),另外两个节点中的大多数用于批量索引。因此,在三个查询索引接收节点中,一个节点和用于批量索引的左侧节点具有相对较高的堆。

我们的配置和索引方法存在以下已知问题,计划修复这些问题:

  1. 批量索引只命中一个节点,从而增加其堆,并导致 html" target="_blank">GC 暂停略高。
  2. mlockall 设置为 false
  3. 在这种情况下,需要快照来还原索引,发生此事件时,我们正处于计划阶段。
  4. 我们可以将 2 个批量作业合并为一个,以避免同时在队列下索引请求。
  5. 我们可以在批量索引脚本中定期使用优化 API,以避免存在过多的段。

Elasticsearch yml:(仅提及相关和启用的设置)

大师:真 index.number_of_shards:5 index.number_of_replicas:2

path.conf: /etc/elasticsearch path.data: /data

transport.tcp.port: 9300 transport.tcp.compress: false

http.port: 9200 http.enabled: true

网关类型:本地 gateway.recover_after_nodes:2 gateway.recover_after_time:5M gateway.expected_nodes:3

discovery.zen.minimum_master_nodes:4 # 现在我们有 6 个节点 发现.zen.ping.timeout: 3s

discovery.zen.ping.multicast.enabled: false

节点统计信息:粘贴链接 热线程:粘贴链接

共有1个答案

邵凯定
2023-03-14

如果我理解得很好,你有 6 台服务器,每台服务器都在运行 elasticsearch 节点。

我要在每个服务器上运行多个节点,分离角色、充当客户端的节点、充当数据节点的节点和充当主节点的节点。我认为您可以在每台服务器上有两个节点。

3 台服务器:数据客户端

3 台服务器:数据主服务器

客户端节点和主节点将需要较少的 RAM。配置文件会更复杂,但会更好地工作。

 类似资料:
  • 问题内容: 在使用Jenkins Docker插件时,可能由于错误而导致无法启动群集。我没有注意,目前有数千个脱机节点无法启动。 底线-是否可以批量删除Jenkin中的节点(从属),清理所有脱机节点甚至删除所有节点?重置Jenkins服务器没有帮助,而且我在Jenkins API中找不到方法。 在我开始编写Selenium脚本之类的东西之前,请感谢任何想法。 非常感谢! 问题答案: 该脚本的注释部

  • 我来自C/C++背景,在这里一个进程内存分为: null 我想把我的注意力集中在这一点上,当我阅读JVM中的堆和堆栈时,我们是在谈论堆栈和堆的概念吗?并且整个JVM的实际内存驻留在堆上(这里指的是堆的C++概念)?

  • 问题内容: 我正在使用reactFire,Firebase和reactJS构建一个简单的待办事项应用程序。我遇到的问题是当我尝试批量删除列表中已完成的条目时。 该循环过早结束,即在删除所有完成的条目之前,因为调用了render函数。 问题答案: 您可以使用多位置更新一次性删除所有已完成的项目:

  • 我正在努力学习RCP中的TreeViewer。我为此写了一小段代码。 我的代码哪里有问题? 谢了!

  • 问题内容: 我在本地计算机上使用elasticsearch。数据目录的大小只有37MB,但是当我查看日志时,可以看到: [2015-05-17 21:31:12,905] [WARN] [cluster.routing.allocation.decider] [Chrome]高磁盘水印在[h9P4UqnCR5SrXxwZKpQ2LQ]上超过了[10%] [Chrome]免费:5.7gb [6.1%

  • 本文向大家介绍jQuery实现checkbox即点即改批量删除及中间遇到的坑,包括了jQuery实现checkbox即点即改批量删除及中间遇到的坑的使用技巧和注意事项,需要的朋友参考一下  最近要用jQuery实现一个批量删除操作,效果如下图 最终页面page.html,此页面使用了bootstrap和jQuery,如果没有需要下载一下 上图的操作主要需要两个操作: 一、当checkBox点击时进

  • 我一直在获取x,下一个在节点中有私人访问权限。我试着在Node类和link List类中进行切换,但无论切换什么,都会出现相同的错误。我的节点保存在另一个文件中,看起来是这样的:`` 然后我的链表堆栈代码如下:

  • 在基于UNIX的操作系统中,每个文件都由一个Inode索引。 Inode是创建文件系统时创建的特殊磁盘块。 文件系统中的文件或目录数量取决于文件系统中的Inode数量。 Inode包含以下信息 - 文件的属性(权限,时间戳,所有权详细信息等) 包含指向文件的前12个块的指针的多个直接块。 指向索引块的单个间接指针。 如果文件不能被直接块完全索引,则使用单个间接指针。 指向磁盘块的双重间接指针,该磁