【Elasticsearch】ES写入满排查思路-内存溢出

在这里插入图片描述

1.概述

转载:https://bbs.huaweicloud.com/forum/thread-69707-1-1.html

2.场景

  • 场景1 内存参数配置不合理。

  • 场景2 bulk提交量过大,导致内存被堆满。

  • 场景3 客户端IP,端口配置问题。

  • 场景4 写入时指定DOC ID,导致读IO高。

  • 场景5 bulk队列积压,请求线程被拒绝。

  • 场景6 热分片问题。

  • 场景7 集群不稳定,大量分片迁移和恢复。

  • 场景8 部分实例长时间不断的full gc,导致实例处于假死状态。

  • 场景9 磁盘IO瓶颈。

  • 场景10 查询业务占用大量的资源。

  • 场景11 索引段合并占用大量的IO资源。

  • 场景12 分词器设计不合理。

3.问题排查步骤

  1. 登录集群,检查集群是否green,是否有分片转移或者实例恢复。如果有分片转移或实例恢复中,待分片转移成功或恢复完成。

  2. 如果有大量的分片转移可以调小分片转移并发数为2,或等待集群分片迁移完成。

  3. 查看集群是否存在告警,如堆内存使用超过阈值的告警。检查服务级别和实例级别的参数设置,确认其GC_OPTS参数设置为30G,且-Xms的值和-Xmx参数值相同。若内存设置合理,则需要采集该节点日志进行分析进一步排查。同时与ISV确认bulk提交方式是否正确,一次bulk提交5MB左右。

  4. 查看bulk写入线程队列情况,是否存在积压的情况。

  5. 如果出现队列积压的问题,需要进一步进行排查分片是否分布的均匀,是否存在热分片的问题。

  6. 与业务侧确定正在写入的索引名称,查看这个索引的分片分布,如果存在阻塞的实例上同时分布着写入索引的多个分片,需要设置total_shards_per_node参数,使得分片均匀分布。

  7. 进一步查看机器IO,执行命令iostat –dxm 1,查看机器IO情况,如果出现IO瓶颈,需进一步进行确认:

    • 是否有大量的查询业务,导致IO被占用,需要控制业务查询并发,同时配置EsClient;
    • 写入是否指定了DOC ID,导致读IO很高,建议使用ES自动分配的doc ID;
    • 是否在进行大量的索引段合并,如果不是SSD盘,建议修改索引段合并线程为1;
    • 确实已经达到磁盘IO瓶颈,需要进行扩容。
  1. 内存达到瓶颈,查看内存满问题定位处理方法。

猜你喜欢

转载自blog.csdn.net/qq_21383435/article/details/113999817