带你读《Elastic Stack 实战手册》之84:——4.3.3.Elasticsearch 性能优化之内存和熔断浅析(下)

本文涉及的产品
Elasticsearch Serverless通用抵扣包,测试体验金 200元
简介: 带你读《Elastic Stack 实战手册》之84:——4.3.3.Elasticsearch 性能优化之内存和熔断浅析(下)

《Elastic Stack 实战手册》——四、应用实践——4.3 性能优化场景——4.3.3.Elasticsearch 性能优化之内存和熔断浅析(中): https://developer.aliyun.com/article/1225156?spm=a2c6h.13148508.setting.19.438f4f0e18NXNE


4.2 熔断器源码浅析


熔断器相关代码主要位于两个包中,包括熔断器接口、一些子类以及异常类和具体服务类等, 本节分别阅读两个包中的代码。


common.breaker


这里定义熔断器接口和两个实现类和异常类,具体如图 4 所示:

image.png

CircuitBreaker 中两个枚举定义了 breaker 细分类:

·   enum Type {MEMORY,PARENT,NOOP}

·    enum Durability {TRANSIENT,PERMANENT}


ChildMemoryCircuitBreaker 类 addEstimateBytesAndMaybeBreak() 方法判断是否请求需要 占用的 bytes 通过 memoryUserd() 计算后超过限制触发跳闸,如图 5 所示:

image.png

图 5 熔断器是否触发判断


例如:terms agg,会通过 BigArrays 这个工具类申请大数组来存放计算数据,在实际分配内 存之前,调用 adjustBreaker() 方法 (其内部调用 addEstimateBytesAndMaybeBreak() 方法) 将新申请数组的大小交给 ChildMemoryCircuitBreaker 来判断是否触发跳闸。


indices.breaker


主要包含具体的熔断服务类 HierarchyCircuitBreakerService,具体结构如图 6:


image.png

图 6 熔断器服务类

HierarchyCircuitBreakerService 内部类 MemoryUsage 实现父熔断器获取内存状态准则,如 图 7 所示:

image.png

图 7 父熔断器行为准则

currentMemoryUsage() 调用的即 JVM 底层的内容:

//构造 MemoryMXBean 
调用 getUsed() MemoryMXBeanMEMORY_MX_BEAN = ManagementFactory.getMemoryMXBean();
return MEMORY_MX_BEAN.getHeapMemoryUsage().getUsed();//MemoryUsage

CircuitBreakerStats 类负责熔断器状态监控,_nodes/stats/breaker 调用。

image.png

图 8 熔断器状态


具体示例如下:

image.png

其中当前使用子熔断器均为自己统计,父熔断器采用 memoryUsed() 方式统计。触发次数为 AtomicLong 类型,每次触发熔断都会加 1,且会打印如下日志。

image.png


日志中会输出内存限制和使用数值信息和 label 信息,表示引起熔断具体原因:

·    : 查询结果分片间聚合

·    : agg 等申请的 BigArrays 过大

·    : http 请求 content 过长

·   "allocated_buckets" :桶太多了( search.max_buckets )

·   ……


5. 小结


本篇文章旨在对 Elasticsearch 内存的使用情况和其在预防 OOM 设置的熔断机制进行简单的 分析,了解其中缘由有助于我们更好的优化 Elasticsearch 内存方面的配置,并在出现内存方 面的异常时更快的定位问题和找到解决办法。


由于作者能力有限,文章中存在的错误以及遗漏还望读者可以批评指出,共同学习,共同进步。


创作人简介:

齐乐,从事大数据开发工作近四年,主要方向为 ES,已通过 ECE 认证,近期在研究 Spark

和 Flink。欢迎一起学习,一起讨论,共同进步。

博客:https://www.jianshu.com/u/cc7ee7454afc

相关实践学习
以电商场景为例搭建AI语义搜索应用
本实验旨在通过阿里云Elasticsearch结合阿里云搜索开发工作台AI模型服务,构建一个高效、精准的语义搜索系统,模拟电商场景,深入理解AI搜索技术原理并掌握其实现过程。
ElasticSearch 最新快速入门教程
本课程由千锋教育提供。全文搜索的需求非常大。而开源的解决办法Elasricsearch(Elastic)就是一个非常好的工具。目前是全文搜索引擎的首选。本系列教程由浅入深讲解了在CentOS7系统下如何搭建ElasticSearch,如何使用Kibana实现各种方式的搜索并详细分析了搜索的原理,最后讲解了在Java应用中如何集成ElasticSearch并实现搜索。  
相关文章
|
7月前
|
机器学习/深度学习 传感器 自动驾驶
从 2D 到 BEV,LSS 技术如何重塑自动驾驶感知?
LSS(Lift-Splat-Shoot)是将多视角图像转换为BEV表示的经典技术,算法虽然老,但应用依然非常广泛
295 23
从 2D 到 BEV,LSS 技术如何重塑自动驾驶感知?
|
数据安全/隐私保护 Python
Python中的MD5加密“解密”
Python中的MD5加密“解密”
320 0
|
人工智能 搜索推荐 机器人
Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
【2月更文挑战第24天】Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
437 2
Rasa: 帮助企业更快搭建“AI对话助手”的低代码平台
|
弹性计算 Prometheus 监控
从自建开源 Prometheus 迁移到阿里云托管 Prometheus 服务
阿里云可观测监控 Prometheus 版提供高性能、高可用、全托管的监控服务,对接开源生态,支持 Kubernetes、ECS 等场景,解决了自建 Prometheus+Thanos 高成本、运维复杂的问题。本文讨论在各个典型场景下的迁移方案。
12342 182
|
数据采集 运维 监控
ARMS自定义监控
【8月更文挑战第25天】
346 3
|
机器学习/深度学习 人工智能 自然语言处理
能自动查找各种漏洞,专用于网络安全的AI Agent
【7月更文挑战第3天】研究表明,大型语言模型(LLM)可应用于网络安全,自动发现和利用漏洞,包括零日漏洞。多Agent系统中,HPTSA规划任务,其他Agent执行具体工作,提升发现和应对漏洞的效率。然而,LLM的复杂性可能导致可解释性、可控性问题,且系统鲁棒性、泛化能力和安全性仍需加强。[链接: arxiv.org/abs/2406.01637]
477 1
|
弹性计算 Kubernetes 监控
阿里云 ACK 容器服务评测
在现代企业的数字化转型过程中,容器化技术逐渐成为提高应用部署效率、增强系统弹性和灵活性的关键手段。阿里云的容器服务 Kubernetes 版(ACK)是一个完全托管的 Kubernetes 容器管理服务,旨在帮助企业轻松实现应用的容器化管理和部署。本文将对阿里云 ACK 容器服务的核心功能、性能表现及实际使用体验进行评测,帮助读者更好地理解这一产品。
402 0

相关产品

  • 检索分析服务 Elasticsearch版