Elasticsearch--解决JVM 堆内存使用率很高的问题_elasticsearch8占用大量内存-程序员宅基地

技术标签: jvm  java  elasticsearch  ELK  

原文网址:Elasticsearch--解决JVM 堆内存使用率很高的问题_IT利刃出鞘的博客-程序员宅基地

简介

说明

本文介绍如何解决ES的JVM 堆内存使用率很高的问题。

官网网址

https://www.elastic.co/guide/en/elasticsearch/reference/current/size-your-shards.html

https://www.elastic.co/guide/en/elasticsearch/reference/current/fix-common-cluster-issues.html

问题描述

高 JVM 内存使用率会降低集群性能并触发断路器错误(导致内存熔断)。

为了防止这种情况发生,如果节点的 JVM 内存使用率持续超过 85%,官方建议采取措施降低内存压力。

诊断 JVM 内存压力

检查 JVM 内存使用情况

借助:node stats API 进行排查

GET _nodes/stats?filter_path=nodes.*.jvm.mem.pools.old

结果

{
    "nodes": {
        "J2-fr3wzSqqJk9cwoi2urw": {
            "jvm": {
                "mem": {
                    "pools": {
                        "old": {
                            "used_in_bytes": 179796016,
                            "max_in_bytes": 1798569984,
                            "peak_used_in_bytes": 179796016,
                            "peak_max_in_bytes": 1798569984
                        }
                    }
                }
            }
        }
    }
}

堆内存使用率为:used_in_bytes / max_in_bytes = 179796016/ 1798569984 = 9.99 6%,接近 10%。

能和 kibana 可视化监控结果保持一致:

垃圾回收日志检查

随着内存使用量的增加,垃圾收集变得更加频繁并且需要更长的时间。

你可以在 elasticsearch.log 中跟踪垃圾收集事件的频率和时长。

例如,以下事件表明 Elasticsearch 在过去 40 秒中花费了超过 50%(21 秒)执行垃圾收集。

[timestamp_short_interval_from_last][INFO ][o.e.m.j.JvmGcMonitorService] [node_id] [gc][number] overhead, spent [21s] collecting in the last [40s]

降低JVM 堆内存使用率方案

1. 减少分片数

关于分片的几点认知:

第一:搜索请求是以分片为单位发起的。

至少 7.16 版本之前是,如下图示更能说明问题:

这暗示了什么?

必然是:分片越多,检索越慢。

因为:跨大量分片的搜索可能会耗尽节点的搜索线程池,这可能导致吞吐量低和搜索速度慢。

第二:每个索引和分片都有内存和 CPU 开销。

每个索引和每个分片都需要一些内存和 CPU 资源。

在大多数情况下,一小组大分片比许多小分片使用更少的资源。

为什么呢?解释一下:

  • 分片的底层是 Lucene 分段。
  • 段的元数据会保留在 JVM 堆内存中,以便快速检索。
  • 分片越多,意味着分段会越多,进而分段元数据会越多,JVM 堆内存使用率会越高。反之,则相反。

第三:Elasticsearch 会在相同角色的节点间平衡分片。

节点角色划分是 7.x 高版本新的节点定义方式,其目的是:节点用途更明确。

当添加新节点或某节点出故障时,Elasticsearch 会自动在相同角色层的剩余节点之间重新平衡索引的分片。

关于减少分片数,更确切的是如何合理规划分片,官方建议如下:

  1. 尽量避免 delete_by_query 删除文档,更好的方案是直接删除索引。
  2. 使用 datastrem 和 ILM 索引生命周期管理管理时序数据。
  3. 分片大小控制在 10GB-50GB。
  4. 控制在每 GB 堆内存 20 个分片以内。
    1. 也就是说:具有 30GB 堆内存的节点最多应该有 600 个分片。
  5. 第五:避免单个节点分片过多、负载过重。
    1. 如果单个节点包含太多分片,且索引量很大,则该节点可能会出现问题。可以使用如下命令行加以控制:
      PUT my_index_001/_settings
      {
          "index":   {
              "routing.allocation.total_shards_per_node":  5
          }
      }

2.避免复杂检索

复杂搜索会占用大量的内存空间。建议启用:慢日志进行排查。

导致内存使用率飙升的复杂查询,通常具备如下的特点:

  • size 召回值设置的巨大;
  • 包含分桶值很大的聚合操作或者聚合嵌套很深;
  • 包含极其耗费资源的查询,举例:script 查询、fuzzy 查询、regexp 查询、prefix 查询、wildcard查询、text 或 keyword 上的 range 查询。

为避免复杂查询,常规措施如下:

  1. 限制:index.max_result_window 的大小。
    1. PUT _settings
      {
        "index.max_result_window": 5000
      }
  2. 设置 search.max_buckets cluster 以限制分桶值大小。
    1. PUT _cluster/settings
      {
        "persistent": {
          "search.max_buckets": 20000,
        }
      }
  3. 设置 search.allow_expensive_queries 直接禁用耗费资源的查询。
    1. PUT _cluster/settings
      {
        "persistent": {
          "search.allow_expensive_queries": false
        }
      }

3.避免 Mapping “爆炸”

定义过多的字段或嵌套过深的字段会导致使用大量内存,出现“Mapping 爆炸" 现象。

为防止“Mapping 爆炸“,使用映射限制设置来限制字段映射的数量。

PUT my_index_001/_settings
{
    "index.mapping.total_fields.limit": 100
}

更多类似参数,见官网:https://www.elastic.co/guide/en/elasticsearch/reference/current/mapping-settings-limit.html

4.分散批量请求

批量请求虽然比单个请求更有效,但大批量写入(以 bulk 操作为代表)或多搜索请求(以 _msearch 为代表)仍然会产生较高的 JVM 内存压力。

如果可能,提交较小(小是个相对值,需要根据集群性能测算出适合自己集群的经验值)的请求并在它们之间留出更多时间时隔。

5.升级节点内存

繁重的写入操作和搜索负载过重均会导致高 JVM 内存压力。

为了更好地处理繁重的工作负载,在其他方法都不灵的情况下,可以考虑通过为节点内存扩容以达到升级节点目的。

这是无法之法,这是万能之法。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/feiying0canglang/article/details/128752672

智能推荐

leetcode 172. 阶乘后的零-程序员宅基地

文章浏览阅读63次。题目给定一个整数 n,返回 n! 结果尾数中零的数量。解题思路每个0都是由2 * 5得来的,相当于要求n!分解成质因子后2 * 5的数目,由于n中2的数目肯定是要大于5的数目,所以我们只需要求出n!中5的数目。C++代码class Solution {public: int trailingZeroes(int n) { ...

Day15-【Java SE进阶】IO流(一):File、IO流概述、File文件对象的创建、字节输入输出流FileInputStream FileoutputStream、释放资源。_outputstream释放-程序员宅基地

文章浏览阅读992次,点赞27次,收藏15次。UTF-8是Unicode字符集的一种编码方案,采取可变长编码方案,共分四个长度区:1个字节,2个字节,3个字节,4个字节。文件字节输入流:每次读取多个字节到字节数组中去,返回读取的字节数量,读取完毕会返回-1。注意1:字符编码时使用的字符集,和解码时使用的字符集必须一致,否则会出现乱码。定义一个与文件一样大的字节数组,一次性读取完文件的全部字节。UTF-8字符集:汉字占3个字节,英文、数字占1个字节。GBK字符集:汉字占2个字节,英文、数字占1个字节。GBK规定:汉字的第一个字节的第一位必须是1。_outputstream释放

jeecgboot重新登录_jeecg 登录自动退出-程序员宅基地

文章浏览阅读1.8k次,点赞3次,收藏3次。解决jeecgboot每次登录进去都会弹出请重新登录问题,在utils文件下找到request.js文件注释这段代码即可_jeecg 登录自动退出

数据中心供配电系统负荷计算实例分析-程序员宅基地

文章浏览阅读3.4k次。我国目前普遍采用需要系数法和二项式系数法确定用电设备的负荷,其中需要系数法是国际上普遍采用的确定计算负荷的方法,最为简便;而二项式系数法在确定设备台数较少且各台设备容量差..._数据中心用电负荷统计变压器

HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板_网页设计成品百度网盘-程序员宅基地

文章浏览阅读7k次,点赞4次,收藏46次。HTML5期末大作业:网页制作代码 网站设计——人电影网站(5页) HTML+CSS+JavaScript 学生DW网页设计作业成品 dreamweaver作业静态HTML网页设计模板常见网页设计作业题材有 个人、 美食、 公司、 学校、 旅游、 电商、 宠物、 电器、 茶叶、 家居、 酒店、 舞蹈、 动漫、 明星、 服装、 体育、 化妆品、 物流、 环保、 书籍、 婚纱、 军事、 游戏、 节日、 戒烟、 电影、 摄影、 文化、 家乡、 鲜花、 礼品、 汽车、 其他 等网页设计题目, A+水平作业_网页设计成品百度网盘

【Jailhouse 文章】Look Mum, no VM Exits_jailhouse sr-iov-程序员宅基地

文章浏览阅读392次。jailhouse 文章翻译,Look Mum, no VM Exits!_jailhouse sr-iov

随便推点

chatgpt赋能python:Python怎么删除文件中的某一行_python 删除文件特定几行-程序员宅基地

文章浏览阅读751次。本文由chatgpt生成,文章没有在chatgpt生成的基础上进行任何的修改。以上只是chatgpt能力的冰山一角。作为通用的Aigc大模型,只是展现它原本的实力。对于颠覆工作方式的ChatGPT,应该选择拥抱而不是抗拒,未来属于“会用”AI的人。AI职场汇报智能办公文案写作效率提升教程 专注于AI+职场+办公方向。下图是课程的整体大纲下图是AI职场汇报智能办公文案写作效率提升教程中用到的ai工具。_python 删除文件特定几行

Java过滤特殊字符的正则表达式_java正则表达式过滤特殊字符-程序员宅基地

文章浏览阅读2.1k次。【代码】Java过滤特殊字符的正则表达式。_java正则表达式过滤特殊字符

CSS中设置背景的7个属性及简写background注意点_background设置背景图片-程序员宅基地

文章浏览阅读5.7k次,点赞4次,收藏17次。css中背景的设置至关重要,也是一个难点,因为属性众多,对应的属性值也比较多,这里详细的列举了背景相关的7个属性及对应的属性值,并附上演示代码,后期要用的话,可以随时查看,那我们坐稳开车了······1: background-color 设置背景颜色2:background-image来设置背景图片- 语法:background-image:url(相对路径);-可以同时为一个元素指定背景颜色和背景图片,这样背景颜色将会作为背景图片的底色,一般情况下设置背景..._background设置背景图片

Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程-程序员宅基地

文章浏览阅读2.6k次,点赞2次,收藏8次。Win10 安装系统跳过创建用户,直接启用 Administrator_windows10msoobe进程

PyCharm2021安装教程-程序员宅基地

文章浏览阅读10w+次,点赞653次,收藏3k次。Windows安装pycharm教程新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是必不可少的KaTeX数学公式新的甘特图功能,丰富你的文章UML 图表FLowchart流程图导出与导入导出导入下载安装PyCharm1、进入官网PyCharm的下载地址:http://www.jetbrains.com/pycharm/downl_pycharm2021

《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...-程序员宅基地

文章浏览阅读835次。本节书摘来自异步社区出版社《跨境电商——速卖通搜索排名规则解析与SEO技术》一书中的第1章,第1.1节,作者: 冯晓宁,更多章节内容可以访问云栖社区“异步社区”公众号查看。1.1 初识速卖通的搜索引擎1.1.1 初识速卖通搜索作为速卖通卖家都应该知道,速卖通经常被视为“国际版的淘宝”。那么请想一下,普通消费者在淘宝网上购买商品的时候,他的行为应该..._跨境电商 速卖通搜索排名规则解析与seo技术 pdf

推荐文章

热门文章

相关标签