elasticsearch堆内存中有大量的ClusterState类信息
Elasticsearch • Charele 回复了问题 • 2 人关注 • 1 个回复 • 587 次浏览 • 13 小时前
【搜索客社区日报】 第1797期 (2024-03-18)
社区日报 • yuebancanghai 发表了文章 • 0 个评论 • 112 次浏览 • 1 天前
https://mp.weixin.qq.com/s/C7D8AHMzRQUxTjTarftYfw
2 什么时候该使用Elasticsearch?
https://zhuanlan.zhihu.com/p/656780550
3、Elasticsearch SQL查询解析
https://blog.csdn.net/weixin_4 ... 39780
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1795期 (2024-03-12)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 374 次浏览 • 4 天前
https://medium.com/%40Frauenho ... ab062
2. 一个大佬的博客,里面有不少技术干货
https://plantegg.github.io/
3. 在线古籍收录网站
https://www.shidianguji.com/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
Easysearch 内核完善之 OOM 内存溢出优化案例一则
Easysearch • liaosy 发表了文章 • 0 个评论 • 379 次浏览 • 4 天前
![](https://www.infinilabs.com/img ... pg.png)
最近某客户在使用 Easysearch 做聚合时,报出 OOM 导致掉节点的问题,当时直接让客户试着调整 indices.breaker.request.limit
,但是不起作用,于是又看了下 Easysearch 在断路器相关的代码,并自己测试了下。
断路器的种类和作用
Easysearch 内部有个 Circuit breaker 机制,目的是防止各种请求的负载过大导致 OutOfMemoryError
,比较常用的断路器有 7 种,分别是:
- Parent circuit breaker 父断路器
- Field data circuit breaker fielddata 断路器
- Request circuit breaker 请求断路器
- In flight requests circuit breaker 传输请求断路器
- Accounting requests circuit breaker lucene 内存占用断路器
- Script compilation circuit breaker 脚本编译断路器
- Regex circuit breaker 正则表达式断路器
其中在执行消耗内存较多的聚合查询时,Request circuit breaker 用得最多。
复现测试
我在模拟客户场景测试聚合查询时,发现断路器并没有覆盖查询的整个流程,仍然会有 OOM 的风险。我测试了一个高基数 5 百万的 Terms aggregation,就没有触发断路,而是在等待了 1 分多钟后直接 OOM 了。我的测试环境是单节点 内存配置为-Xmx1g
,测试索引只有 1 个 shard。
测试语句如下:
<br /> curl -X GET "localhost:9211/leader-01/_search?pretty" -H 'Content-Type: application/json' -d'<br /> {<br /> "size": 1,<br /> "aggs": {<br /> "a": {<br /> "terms": { "field": "agent.id.keyword", "size": 5000000 }<br /> }<br /> }<br /> }' > a.txt<br />
Easysearch OOM 日志:
![](https://infinilabs.com/img/blo ... 1.webp)
内存泄漏分析
使用 MemoryAnalyzer 分析生成的 jvm 堆转储文件:
![](https://infinilabs.com/img/blo ... 2.webp)
最大的内存占用来自 Java 线程java.lang.Thread @ 0x7c8bb1d00
。这个线程浅层(Shallow)保留的对象占用了 112.8MB 内存。但该线程实际保留(Retained)的对象内存占用高达 851 MB,成为整个内存占用的绝对大头。
进一步查看 Leak Suspects:
![](https://infinilabs.com/img/blo ... 3.webp)
非常明确的给出了具体的内存泄露的对象:StringTerms$Bucket[7500010]
数组长度达到了七百五十万,占用内存:731,001,720 字节(占总内存的 68.65%)。
按照提示的GlobalOrdinalsStringTermsAggregator.java:586
行,去查看代码,实际上是将收集完的OrdBucket
转换为StringTerms.Bucket
,并且有一个copy BytesRef
的操作。
至此,原因和解决办法都清楚了,只要在转换之前预估一下将要增长的内存并调用断路器检测一下内存,一旦超出允许范围就快速触发CircuitBreakingException
,避免长时间等待后 OOM 引起的节点宕机了。
最新版 Elasticsearch 对比
作为对比,我又测试了下 Elasticsearch 最新版本 8.12.2,同样的测试环境和测试方法,结果依然是 OOM:
![](https://infinilabs.com/img/blo ... 4.webp)
从这里可以看出 Elasticsearch 即使是最新版的断路器机制也还有很多改进的余地,比如增加对有 OOM 风险查询的覆盖率,还有就是在触发 GC 时,对 GC 堆内存回收的判断过于简单。
Easysearch 最新版本的改进
Easysearch 刚刚发布的 1.7.1 版本已经增加了上面的改进,后面也会持续改进查询聚合操作的内存控制,最新版本的跨集群复制(CCR)也增加了对 source_reuse 索引的支持,能更好的满足客户降本增效的需求,欢迎大家下载试用。
附官网下载链接:<https://www.infinilabs.com/dow ... gt%3B
关于 Easysearch
![about easysearch](https://www.infinilabs.com/img ... er.png)
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。 与 Elasticsearch 相比,Easysearch 更关注在搜索业务场景的优化和继续保持其产品的简洁与易用性。
官网文档:<https://www.infinilabs.com/doc ... gt%3B
作者:张磊,原文:<https://www.infinilabs.com/blo ... gt%3B
【搜索客社区日报】第1796期 (2024-03-14)
社区日报 • Se7en 发表了文章 • 0 个评论 • 440 次浏览 • 4 天前
https://medium.com/%40florian_ ... 7f2d1
2.提高 Elasticsearch 中的聚合性能
https://opster.com/guides/elas ... -size
3.OpenAI联合创始人通俗解读大语言模型
https://mp.weixin.qq.com/s/VUxmkXlJxiYCu9YB1A_WLw
4.最迟但到的 Star History 2023 年度开源精选!
https://mp.weixin.qq.com/s/95kVJjcgfY4nKg0pZf5Glw
编辑:Se7en
更多资讯:http://news.searchkit.cn
【搜索客社区日报】 第1794期 (2024-03-11)
社区日报 • yuebancanghai 发表了文章 • 0 个评论 • 802 次浏览 • 2024-03-11 10:55
1. Elasticsearch堆外溢出导致频繁OOM怎么办?
https://cloud.tencent.com/deve ... 82184
2、一文搞懂 Elasticsearch 监控
https://zhuanlan.zhihu.com/p/566809219
3、ElasticSearch 的跨索引查询详细讲解
https://www.jianshu.com/p/b9a07bfb766a
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1793期 (2024-03-07)
社区日报 • Se7en 发表了文章 • 0 个评论 • 1187 次浏览 • 2024-03-07 09:43
https://cloud.tencent.com/deve ... 87985
2. 4k+评论,10w+赞的Reddit神贴|入职第一天,误删生产库,公司要起诉,我该怎么办?
https://mp.weixin.qq.com/s/6vyJOug1kbeUyZz8N64v6Q
3. 滴滴基于 Clickhouse 构建新一代日志存储系统
https://mp.weixin.qq.com/s/360RDfAv9CjCt_8hnOFd6w
4. 使用 Homebrew 在 MacOS 上安装 Elasticsearch(需要梯子)
https://medium.com/%40malvin.l ... 44a1c
编辑:Se7en
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1791期 (2024-03-05)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 1374 次浏览 • 2024-03-05 09:19
1. pinterest 为什么只要6个工程师就能支持千万用户?
https://read.engineerscodex.co ... llion
2. 一个很有意思的搜索引擎,可以把网上找到的内容按分类展开
https://explorer.globe.engineer/
3. 认知偏差知识手册
https://s75w5y7vut.feishu.cn/d ... 5poFf
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
INFINI Labs 产品更新 | Easysearch 1.7.1发布,改进跨集群复制的数据加载等
Easysearch • liaosy 发表了文章 • 0 个评论 • 1430 次浏览 • 2024-03-04 15:25
![release](https://www.infinilabs.com/img ... er.png)
INFINI Labs 产品又更新啦~,包括 Console,Gateway,Agent 1.23.0 和 Easysearch 1.7.1。本次各产品更新了很多亮点功能,如 Console 优化实例管理中增加磁盘空闲空间显示,Easysearch 改进 HierarchyCircuitBreakerService 并添加断路器、改进跨集群复制的数据加载,增加对 source_reuse 索引的支持等。欢迎大家下载体验。
以下是本次更新的详细说明。
INFINI Easysearch v1.7.1
INFINI Easysearch 是一个分布式的近实时搜索与分析引擎,核心引擎基于开源的 Apache Lucene。Easysearch 的目标是提供一个轻量级的 Elasticsearch 可替代版本,并继续完善和支持更多的企业级功能。
Easysearch 本次更新如下:
Bug fix
- 修复 source_reuse 与字段别名冲突
- 改进 HierarchyCircuitBreakerService 并添加断路器
- 修复 _meta 不为空且 启用 source_reuse 时的映射解析错误
- 修复 source_reuse 下对多值还原不正确的问题
Improvements
- 改进 HierarchyCircuitBreakerService 并添加断路器
- 改进跨集群复制的数据加载,增加对 source_reuse 索引的支持
INFINI Console v1.23.0
INFINI Console 是一款非常轻量级的多集群、跨版本的搜索基础设施统一管控平台。通过对流行的搜索引擎基础设施进行跨版本、多集群的集中纳管, 企业可以快速方便的统一管理企业内部的不同版本的多套搜索集群。
Console 在线体验: <http://demo.infini.cloud> (用户名/密码:readonly/readonly)。
Console 本次更新如下:
Bug fix
- 修复数据迁移中数据分片范围因精度导致数据溢出显示为负数
- 修复删除实例队列后消费的 Offset 未重置问题
- 修复网友提出的各种问题,如集群设置默认打开节点、索引采集等
Improvements
- 优化初始化配置向导,分步骤执行
- 优化实例管理中增加磁盘空闲空间显示
- 优化实例队列名称显示
INFINI Gateway v1.23.0
INFINI Gateway 是一个面向搜索场景的高性能数据网关,所有请求都经过网关处理后再转发到后端的搜索业务集群。基于 INFINI Gateway 可以实现索引级别的限速限流、常见查询的缓存加速、查询请求的审计、查询结果的动态修改等等。
Gateway 本次更新如下:
Bug fix
- 修复删除实例队列后消费的 Offset 未重置问题
期待反馈
欢迎下载体验使用,如果您在使用过程中遇到如何疑问或者问题,欢迎前往 INFINI Labs Github(<https://github.com/infinilabs>) 中的对应项目中提交 Feature Request 或提交 Bug。
- 下载地址: <https://www.infinilabs.com/download>
您还可以通过邮件联系我们:hello@infini.ltd
或者拨打我们的热线电话:(+86) 400-139-9200
欢迎加入 Discord 聊天室:<https://discord.gg/4tKTMkkvVX>
也欢迎大家微信扫码添加小助手(INFINI-Labs),加入用户群一起讨论交流。
![联系我们](https://www.infinilabs.com/img ... ew.jpg)
关于极限科技(INFINI Labs)
![INFINI Labs](https://www.infinilabs.com/img ... bs.png)
极限科技,全称极限数据(北京)科技有限公司,是一家专注于实时搜索与数据分析的软件公司。旗下品牌极限实验室(INFINI Labs)致力于打造极致易用的数据探索与分析体验。
极限科技是一支年轻的团队,采用天然分布式的方式来进行远程协作,员工分布在全球各地,希望通过努力成为中国乃至全球企业大数据实时搜索分析产品的首选,为中国技术品牌输出添砖加瓦。
官网:<https://www.infinilabs.com>
【搜索客社区日报】 第1790期 (2024-03-04)
社区日报 • yuebancanghai 发表了文章 • 0 个评论 • 1427 次浏览 • 2024-03-04 10:09
1. ElasticSearch—数据迁移
https://blog.csdn.net/bbsxb520 ... 14931
2、记一次Elasticsearch集群迁移架构实战
https://blog.csdn.net/x275920/ ... 73879
3、Elasticsearch 使用极限网关助力 ES 集群无缝升级、迁移上/下云
https://mp.weixin.qq.com/s/bT7KiSqLMkoYIcUrwNSMuQ
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1787期 (2024-02-27)
社区日报 • God_lockin 发表了文章 • 0 个评论 • 1640 次浏览 • 2024-03-01 14:39
1. 用google cloud处理snapshot的最佳实践(需要梯子)
https://medium.com/%40musabdog ... c59f4
2. 一个收录了(几乎)全部独立开发用得到的内容,教程、网站、数据集…(需要梯子)
https://github.com/ripienaar/free-for-dev
3. 有关GPU的科普(需要梯子)
https://journal.hexmos.com/gpu-survival-toolkit/
编辑:斯蒂文
更多资讯:http://news.searchkit.cn
【搜索客社区日报】第1789期 (2024-02-29)
社区日报 • Se7en 发表了文章 • 0 个评论 • 1695 次浏览 • 2024-02-29 21:12
https://journal.everypixel.com ... ition
2.当事人复盘 GitLab 史上最严重的数据库故障
https://mp.weixin.qq.com/s/Y7qAaYt2uIylqlPve9DGzg
3.在单机模式下进行原型设计和比较 Milvus 和 Elasticsearch(需要梯子)
https://medium.com/%40piscarie ... 390ef
4.从 Elasticsearch 到 Apache Doris,统一日志检索与报表分析,360 企业安全浏览器的数据架构升级实践
https://mp.weixin.qq.com/s/WJIa44Qtp9wzv5QwNUoNOg
编辑:Se7en
更多资讯:http://news.searchkit.cn
搜索客社区日报 第1788期 (2024-02-28)
社区日报 • kin122 发表了文章 • 0 个评论 • 1702 次浏览 • 2024-02-28 15:03
https://blog.csdn.net/UbuntuTo ... 51152
2.Elasticsearch:BM25 及 使用 Elasticsearch 和 LangChain 的自查询检索器
https://blog.csdn.net/UbuntuTo ... 58515
3.使用 Chainlit, Langchain 及 Elasticsearch 轻松实现对 PDF 文件的查询
https://blog.csdn.net/UbuntuTo ... 11385
4.Elasticsearch:基于 Langchain 的 Elasticsearch Agent 对文档的搜索
https://elasticstack.blog.csdn ... 53286
编辑:kin122
更多资讯:http://news.searchkit.cn
如何防止 Elasticsearch 服务 OOM?
Easysearch • yangmf2040 发表了文章 • 0 个评论 • 1803 次浏览 • 2024-02-26 10:12
Elasticsearch(简称:ES) 和传统关系型数据库有很多区别, 比如传统数据中普遍都有一个叫“最大连接数”的设置。目的是使数据库系统工作在可控的负载下,避免出现负载过高,资源耗尽,谁也无法登录的局面。
那 ES 在这方面有类似参数吗?答案是没有,这也是为何 ES 会被流量打爆的原因之一。
针对大并发访问 ES 服务,造成 ES 节点 OOM,服务中断的情况,极限科技旗下的 [INFINI Gateway](https://www.infinilabs.com/products/gateway/) 产品(以下简称 “极限网关”)可从两个方面入手,保障 ES 服务的可用性。
- 限制最大并发访问连接数。
- 限制非重要索引的请求速度,保障重要业务索引的访问速度。
下面我们来详细聊聊。
架构图
![](https://www.infinilabs.com/img ... /0.png)
所有访问 ES 的请求都发给网关,可部署多个网关。
限制最大连接数
在网关配置文件中,默认有最大并发连接数限制,默认最大 10000。
```
entry:- name: my_es_entry
enabled: true
router: my_router
max_concurrency: 10000
network:
binding: $[[env.GW_BINDING]]
See
gateway.disable_reuse_port_by_default
for more information.reuse_port: true
```
使用压测程序测试,看看到达10000个连接后,能否限制新的连接。
![](https://www.infinilabs.com/img ... /1.png)
超过的连接请求,被丢弃。更多信息参考[官方文档](https://www.infinilabs.com/doc ... entry/)。
限制索引写入速度
我们先看看不做限制的时候,测试环境的写入速度,在 9w - 15w docs/s 之间波动。虽然峰值很高,但不稳定。
![](https://www.infinilabs.com/img ... /2.png)
接下来,我们通过网关把写入速度控制在最大 1w docs/s 。
对网关的配置文件 gateway.yml ,做以下修改。
```yaml
env: # env 下添加
THROTTLE_BULK_INDEXING_MAX_BYTES: 40485760 #40MB/s
THROTTLE_BULK_INDEXING_MAX_REQUESTS: 10000 #10k docs/s
THROTTLE_BULK_INDEXING_ACTION: retry #retry,drop
THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES: 10 #1000
THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS: 100 #10
router: # route 部分修改 flow - name: my_router
default_flow: default_flow
tracing_flow: logging_flow
rules:
- method:
- "*"
pattern: - "/_bulk"
- "/{any_index}/_bulk"
flow: - write_flow
flow: #flow 部分增加下面两段
- "*"
- method:
- name: write_flow
filter:
- flow:
flows:
- bulking_indexing_limit
- bulking_indexing_limit
- elasticsearch:
elasticsearch: prod
max_connection_per_node: 1000
- flow:
- name: bulking_indexing_limit
filter:
- bulk_request_throttle:
indices:
"test-index":
max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
message: "bulk writing too fast" #触发限流告警message自定义
log_warn_message: true
```
再次压测,test-index 索引写入速度被限制在了 1w docs/s 。
![](https://www.infinilabs.com/img ... /3.png)
限制多个索引写入速度
上面的配置是针对 test-index 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。
比如,我允许 abc 索引写入达到 2w docs/s,test-index 索引最多不超过 1w docs/s ,可配置如下。
```yaml
- bulk_request_throttle:
- name: bulking_indexing_limit
filter:
- bulk_request_throttle:
indices:
"abc":
max_requests: 20000
action: drop
message: "abc doc写入超阈值" #触发限流告警message自定义
log_warn_message: true
"test-index":
max_bytes: $[[env.THROTTLE_BULK_INDEXING_MAX_BYTES]]
max_requests: $[[env.THROTTLE_BULK_INDEXING_MAX_REQUESTS]]
action: $[[env.THROTTLE_BULK_INDEXING_ACTION]]
retry_delay_in_ms: $[[env.THROTTLE_BULK_INDEXING_RETRY_DELAY_IN_MS]]
max_retry_times: $[[env.THROTTLE_BULK_INDEXING_MAX_RETRY_TIMES]]
message: "bulk writing too fast" #触发限流告警message自定义
log_warn_message: true
```
限速效果如下
![](https://www.infinilabs.com/img ... /4.png)
限制读请求速度
我们先看看不做限制的时候,测试环境的读取速度,7w qps 。
![](https://www.infinilabs.com/img ... /5.png)
接下来我们通过网关把读取速度控制在最大 1w qps 。
继续对网关的配置文件 gateway.yml 做以下修改。
```yaml
- bulk_request_throttle:
- name: default_flow
filter:
- request_path_limiter:
message: "Hey, You just reached our request limit!" rules:
- pattern: "/(?P
abc)/_search"
max_qps: 10000
group: index_name
- pattern: "/(?P
- elasticsearch:
elasticsearch: prod
max_connection_per_node: 1000
```
再次进行测试,读取速度被限制在了 1w qps 。
![](https://www.infinilabs.com/img ... /6.png)
限制多个索引读取速度
上面的配置是针对 abc 索引的写入速度控制。如果想添加其他的索引,新增一段配置即可。
比如,我允许 abc 索引读取达到 1w qps,test-index 索引最多不超过 2w qps ,可配置如下。
```yaml
- request_path_limiter:
- name: default_flow
filter:
- request_path_limiter:
message: "Hey, You just reached our request limit!"
rules:
- pattern: "/(?P
abc)/_search"
max_qps: 10000
group: index_name - pattern: "/(?P
test-index)/_search"
max_qps: 20000
group: index_name
- pattern: "/(?P
- elasticsearch:
elasticsearch: prod
max_connection_per_node: 1000
```
![](https://www.infinilabs.com/img ... /7.png)
多个网关限速
限速是每个网关自身的控制,如果有多个网关,那么后端 ES 集群收到的请求数等于多个网关限速的总和。
![](https://www.infinilabs.com/img ... /8.png)
本次介绍就到这里了。相信大家在使用 ES 的过程中也遇到过各种各样的问题。欢迎大家来我们这个平台分享自己的问题、解决方案等。如有任何问题,请随时联系我,期待与您交流!
![](https://www.infinilabs.com/img ... gf.png)
- request_path_limiter:
- name: my_es_entry
【搜索客社区日报】 第1786期 (2024-02-26)
社区日报 • yuebancanghai 发表了文章 • 0 个评论 • 1749 次浏览 • 2024-02-26 09:19
https://mp.weixin.qq.com/s/6bB31_xsJ3IUnV_GxBGR-g
2、Elasticsearch 实战之xpack安装、解密和更换证书以及head加密
https://blog.csdn.net/weixin_4 ... 74362
3、Elasticsearch 如何实现文件名自定义排序
https://mp.weixin.qq.com/s/yzhkbt7fsgIgKee7zwDJYQ
编辑:yuebancanghai
更多资讯:http://news.searchkit.cn