es 报错 Data too large 触发断路器

### 文章目录

  • [@[toc]](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)
  • [事出有因](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)
  • [解决思路](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)
  • [效果展示](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)
  • [关于重启](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)
  • [课外扩展](#文章目录 @[toc] 事出有因 解决思路 效果展示 关于重启 课外扩展)

事出有因

报错原因是 es 在 full GC 之前触发了默认的断路器,导致报错 [parent] Data too large,相似的报错内容如下:

复制代码
Caused by: org.elasticsearch.common.breaker.CircuitBreakingException: [parent] Data too large, data for [<transport_request>] would be [1021339792/974mb], which is larger than the limit of [1020054732/972.7mb], real usage: [1021337736/974mb], new bytes reserved: [2056/2kb], usages [request=0/0b, fielddata=1730/1.6kb, in_flight_requests=88822/86.7kb, accounting=12643373/12mb]

查看当前 es 节点的 jvm 内存使用情况(ip和端口要换成自己的 es 节点)

复制代码
curl -s -XGET '10.190.107.78:19200/_cat/nodes?v=true&h=name,node*,heap*' 
  • heap.current 当前使用的内存
  • heap.percent 内存使用量百分比
  • heap.max 内存最大值
复制代码
name id   node.role heap.current heap.percent heap.max 
es-3 q8nd dilm           935.3mb           91      1gb 
es-2 U5GI dilm           700.2mb           68      1gb 
es-1 vgkL dilm           825mb             80      1gb 
es-0 UH0L dilm           511.6mb           49      1gb 

解决思路

  • 如果本机内存足够,并且满足官方的要求:不超过本机50%的内存或者不超过32G内存,那就可以直接通过配置 xmx 和 xms 来解决;有两种配置方法
    • 通过修改 jvm.options 文件内的 xmxxms 来实现
    • 通过环境变量 ES_JAVA_OPTS 来实现(7.x 系列是有的,具体可以看 elasticsearch 文件里面的内容来确定)
  • 如果本机内存不足以调整 jvm 内存了,那就需要通过调整 gc 垃圾回收来解决,同样的,可以通过上述两种方式来配置

ES Circuit Breaker 断路器

  • indices.breaker.total.use_real_memory - 默认为true
    • 静态设置确定父断路器是否应考虑实际内存使用情况(true)
    • 仅考虑子断路器保留的数量(false)
  • indices.breaker.total.limit - 父断路器触发上限
    • indices.breaker.total.use_real_memorytrue 时,默认为 jvm 堆内存的 95%
    • indices.breaker.total.use_real_memoryfalse 时,默认为 jvm 堆内存的 70%

jvm 常见的垃圾收集器的组合方式

  • -XX:+UseConcMarkSweepGC - 启用 CMS 垃圾收集器
  • -XX:CMSInitiatingOccupancyFraction=75 - 内存使用率达到 75% 的时候触发 full GC
  • -XX:+UseCMSInitiatingOccupancyOnly - 如果不指定,只是用设定的回收阈值 CMSInitiatingOccupancyFraction, 则 JVM 仅在第一次使用设定值,后续则自动调整会导致上面的那个参数不起作用

效果展示

我这里是通过上面三个参数,来指定 CMS 作为垃圾收集器,以此来解决 es 的报错问题

复制代码
curl -s -XGET '10.190.107.78:19200/_cat/nodes?v=true&h=name,node*,heap*' 

可以从下面的数据看出,效果也是立竿见影

复制代码
name id   node.role heap.current heap.percent heap.max 
es-1 vgkL dilm           431.6mb           43  989.8mb 
es-0 UH0L dilm           337.1mb           34  989.8mb 
es-2 U5GI dilm           500.5mb           50  989.8mb 
es-3 q8nd dilm           730.3mb           73  989.8mb

关于重启

重启 es 集群时,遵循从非 master 节点开始,依次重启,每一个节点起来后,再重启下一个节点;es 节点重启之前,可以先关闭 es 自动分片分配,避免多节点重启,过多分片重新分配,占用大量的 IO 把集群搞崩了
关闭自动分片分配

shell 复制代码
curl -XPUT 10.190.107.78:19200/_cluster/settings -H 'Content-Type: application/json' -d '
{
    "transient": {
        "cluster.routing.allocation.enable": "none"
    }
}'

开启自动分片分配

shell 复制代码
curl -XPUT 10.190.107.78:19200/_cluster/settings -H 'Content-Type: application/json' -d '
{
    "transient": {
        "cluster.routing.allocation.enable": "all"
    }
}'

课外扩展

限制内存使用

相关推荐
@insist1239 小时前
信息安全工程师考点精讲:身份认证核心原理与分类体系(上篇)
大数据·网络·分类·信息安全工程师·软件水平考试
天辛大师9 小时前
AI助力旅游扩大化,五一旅游公园通游年票普惠研究
大数据·启发式算法·旅游
WordPress学习笔记10 小时前
镌刻中式美学的高端WordPress主题
大数据·人工智能·wordpress
数智化精益手记局11 小时前
拆解物料管理erp系统的核心功能,看物料管理erp系统如何解决库存积压与缺料难题
大数据·网络·人工智能·安全·信息可视化·精益工程
Elastic 中国社区官方博客12 小时前
使用 Observability Migration Platform 将 Datadog 和 Grafana 的仪表板与告警迁移到 Kibana
大数据·elasticsearch·搜索引擎·信息可视化·全文检索·grafana·datalog
jkyy201413 小时前
AI运动数字化:以技术重塑场景,健康有益赋能全域运动健康管理
大数据·人工智能·健康医疗
金融小师妹13 小时前
4月30日多因子共振节点:鲍威尔“收官效应”与权力结构重塑的预期重构
大数据·人工智能·重构·逻辑回归
2601_9499251813 小时前
AI Agent如何重构跨境物流的决策?
大数据·人工智能·重构·ai agent·geo优化·物流科技
xiaoduo AI13 小时前
客服机器人问题解决率怎么统计?Agent系统自动判断是否解决,比人工回访准?
大数据·人工智能·机器人
小五兄弟14 小时前
YouTube 肖像检测扩展背后:短剧出海版权保护的技术实现与实战策略
大数据·人工智能