ES千亿级检索实战 堆OOM 问题深度分析

这篇具有很好参考价值的文章主要介绍了ES千亿级检索实战 堆OOM 问题深度分析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

问题描述

  在特大规模的索引中检索,通常一次检索涉及到的分片数达到2000个左右。加上跨集检索,堆有非常大的压力,OOM的问题经常发生。本篇文章,对线上环境的堆进行深度分析,看看都有什么。

  我使用prifile来分析查看堆快照。并结合目前我对es底层的了解,来分析堆中都有什么。

  但节点JVM相关配置。每个节点给堆31G内存,fieldDataCache 10%,queriesCahce 10% 其它都是默认的。fieldDataCache会随着数据的变多二无限的增大。这里最好给你一个限制。否则堆的可利用空间会非常的低!

问题发现

ES千亿级检索实战 堆OOM 问题深度分析

问题排查

翻看集群日志OverHead 问题

[2022-09-06T09:14:28,482][INFO ][o.e.m.j.JvmGcMonitorService] [10.99.100.10-2] [gc][young][3934559][634925] duration [744ms], collections [1]/[1s], total [744ms]/[10.5h], memory [16.4gb]->[15.5gb]/[31gb], all_pools {[young] [624mb]->[64mb]/[0b]}{[old] [15gb]->[15.2gb]/[31gb]}{[survivor] [833.1mb]->[182.4mb]/[0b]}

节点堆利用率持续高的问题

从某个节点GC情况来看,持续占用很高,下不来。JVM的平均利用率已经来到了85%。

ES千亿级检索实战 堆OOM 问题深度分析

dump该节点的堆快照

jmap -dump:live,format=b,file=dump.hprof 12587
# dump.hprof 是堆快照的文件名
# 12587 是进程id
# ps -ef |grep elasticserch 可以看到进程id号。

对堆快照进行分析

堆快照 39G

使用profile分析堆快照

重点来看堆中的biggest Objects

9个G的缓存

3个G的queryCache + 3个G的fieldData + 3G写缓存

ES千亿级检索实战 堆OOM 问题深度分析

1.4G的页面缓存

ES千亿级检索实战 堆OOM 问题深度分析

关于页面缓存的介绍:

通常,希望将可能被聚合重用的对象提升到老年代,而不是新生代填满后恰巧放到老年代的一些随机的、临时的对象。为了实现这个目标, Elasticsearch实现了一个页面缓存回收器( PageCacheRecycler ),其中被聚合所使用的大数组被保留下来,不会被垃圾回收。默认的页面缓存是整个堆的10%,某些情况下这个值可能太大(例如,有30 GB的堆内存,页面缓存就有3GB了)

2个G的段的元信息

ES千亿级检索实战 堆OOM 问题深度分析

关于这部分内容的详细介绍:

读lucene的索引段代码笔记_源远流长的博客-CSDN博客

其它的分析

可以看到有 byte类型的和long类型的,这部分需要具体点进去,看看

ES千亿级检索实战 堆OOM 问题深度分析

OOM的问题溯源

实际上本身,集群的堆已经处于一个亚健康状态,堆的利用率已经极高了。在特大查询来的时候就特别容易引发OOM。在这种情况下,压倒骆驼的只需要最后一根稻草。通过查看集群日志们已经发现了很多overHead的日志。本次OOM的最后一根稻草就是:很多个检索词的问题,一次检索看到468个检索词。这在千亿级的检索中,加上跨集群检索,特别致命。跨集群查询,返回较多数据,且耗时长,它就需要一直占据堆空间。

解决方案:

  • 角色要调整。远程角色也可以单独出来,减轻数据节点的压力。从业务上减少这样的多检索词的请求。
  • 问题的本质是堆空间不足。这是集群资源不足。有条件去扩展集群,这个问题也就不会有了。如果不能扩集群,在资源有限的情况下,只能通过调参数,让集群勉强支持。但是此时就不能谈性能的事情了。

在资源有限的情况下,如何调堆

ES堆占用高问题分析与解决方案_水的精神的博客-CSDN博客文章来源地址https://www.toymoban.com/news/detail-413607.html

到了这里,关于ES千亿级检索实战 堆OOM 问题深度分析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 机器学习&&深度学习——NLP实战(情感分析模型——数据集)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——BERT(来自transformer的双向编码器表示) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 预训练文本表示可以通过不同模型架构,放入不同的下游自然语言处理任务。

    2024年02月11日
    浏览(30)
  • 机器学习&&深度学习——NLP实战(情感分析模型——RNN实现)

    👨‍🎓作者简介:一位即将上大四,正专攻机器学习的保研er 🌌上期文章:机器学习深度学习——NLP实战(情感分析模型——数据集) 📚订阅专栏:机器学习深度学习 希望文章对你们有所帮助 与词相似度和类比任务一样,我们也可以将预先训练的词向量应用于情感分析。

    2024年02月11日
    浏览(23)
  • PyTorch深度学习实战 | 高斯混合模型聚类原理分析

    为理解高斯混合模型解决聚类问题的原理,本实例采用三个一元高斯函数混合构成原始数据,再采用GMM来聚类。 1) 数据 三个一元高斯组件函数可以采用均值和协方差表示如表1所示: ▍表1 三个一元高斯组件函数的均值和协方差 每个高斯组件函数分配不同的权重,其中1号组

    2024年02月01日
    浏览(35)
  • 深度探索 Elasticsearch 8.X:function_score 参数解读与实战案例分析

    在 Elasticsearch 中,function_score 可以让我们在查询的同时对搜索结果进行自定义评分。 function_score 提供了一系列的参数和函数让我们可以根据需求灵活地进行设置。 近期有同学反馈,function_score 的相关参数不好理解,本文将深入探讨 function_score 的核心参数和函数。 Elasticsear

    2024年02月14日
    浏览(33)
  • 【Linux系统进阶详解】Linux核心命令深度实战实现原理详解和每个命令使用场景以及实例分析

    在Linux系统中, find 、 xargs 、 sed 、 grep 、正则表达式和通配符是非常常用的命令和技巧。它们可以结合使用,实现更复杂的文件查找、过滤和操作。下面将详细介绍它们的实现原理和使用场景。 find命令 ``find`命令通过遍历指定目录及其子目录来查找符合条件的文件或目录。

    2024年02月08日
    浏览(215)
  • elasticsearch 百亿级数据检索案例与原理

    版权说明: 本文章版权归本人及博客园共同所有,转载请标明原文出处( elasticsearch 百亿级数据检索案例与原理 - mikevictor - 博客园 ),以下内容为个人理解,仅供参考。 一、前言      数据平台已迭代三个版本,从头开始遇到很多常见的难题,终于有片段时间整理一些已完

    2024年02月14日
    浏览(27)
  • 数据库中亿级数据要求检索秒级返回

    提示:最近有个新需求,需要在mysql数据库中插入亿级数据,同时在查询时要求秒级返回。我的想法是第一步要在数据库中插入亿级数据,第二步给字段加索引以达到查询秒级返回的效果。 亿级数据的秒级返回,比较困难的是快速在数据库中插入亿级数据,所以这一步花了很

    2024年02月03日
    浏览(32)
  • 京东APP百亿级商品与车关系数据检索实践

    本文主要讲解了京东百亿级商品车型适配数据存储结构设计以及怎样实现适配接口的高性能查询。通过京东百亿级数据缓存架构设计实践案例,简单剖析了jimdb的位图(bitmap)函数和lua脚本应用在高性能场景。希望通过本文,读者可以对缓存的内部结构知识有一定了解,并且能够

    2024年02月03日
    浏览(26)
  • ES大量数据条件检索准确性问题

    事例:如查询0~1000的结果集时,分页查询乱序,会搜索出来,也会搜索不出来,目前查询到的结果是分片不一致导致的,需要指定唯一分片查询 ES中基于分片的搜索方式,是分2个阶段进行的,即Query阶段和Fetch阶段。 ES的搜索类型有2种; query then fetch(默认的搜索方式) 基于

    2024年02月04日
    浏览(46)
  • ES优化实战-通过开启copy_to提升一倍的检索性能

      在对text字段进行搜索的时候,假如你需要对多个text类型的字段搜索,例如 文章的标题和文章的内容,这两个字段。   在这种情况下,是可以开启copy_to来提速的。我测试的提速效果在百分之五十左右。   它是将这两个字段copy到一个字段上,然后进行分词处理。之所以会快

    2023年04月19日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包