技术标签: 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%,官方建议采取措施降低内存压力。
借助: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]
关于分片的几点认知:
第一:搜索请求是以分片为单位发起的。
至少 7.16 版本之前是,如下图示更能说明问题:
这暗示了什么?
必然是:分片越多,检索越慢。
因为:跨大量分片的搜索可能会耗尽节点的搜索线程池,这可能导致吞吐量低和搜索速度慢。
第二:每个索引和分片都有内存和 CPU 开销。
每个索引和每个分片都需要一些内存和 CPU 资源。
在大多数情况下,一小组大分片比许多小分片使用更少的资源。
为什么呢?解释一下:
第三:Elasticsearch 会在相同角色的节点间平衡分片。
节点角色划分是 7.x 高版本新的节点定义方式,其目的是:节点用途更明确。
当添加新节点或某节点出故障时,Elasticsearch 会自动在相同角色层的剩余节点之间重新平衡索引的分片。
关于减少分片数,更确切的是如何合理规划分片,官方建议如下:
PUT my_index_001/_settings
{
"index": {
"routing.allocation.total_shards_per_node": 5
}
}
复杂搜索会占用大量的内存空间。建议启用:慢日志进行排查。
导致内存使用率飙升的复杂查询,通常具备如下的特点:
为避免复杂查询,常规措施如下:
PUT _settings
{
"index.max_result_window": 5000
}
PUT _cluster/settings
{
"persistent": {
"search.max_buckets": 20000,
}
}
PUT _cluster/settings
{
"persistent": {
"search.allow_expensive_queries": false
}
}
定义过多的字段或嵌套过深的字段会导致使用大量内存,出现“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
批量请求虽然比单个请求更有效,但大批量写入(以 bulk 操作为代表)或多搜索请求(以 _msearch 为代表)仍然会产生较高的 JVM 内存压力。
如果可能,提交较小(小是个相对值,需要根据集群性能测算出适合自己集群的经验值)的请求并在它们之间留出更多时间时隔。
繁重的写入操作和搜索负载过重均会导致高 JVM 内存压力。
为了更好地处理繁重的工作负载,在其他方法都不灵的情况下,可以考虑通过为节点内存扩容以达到升级节点目的。
这是无法之法,这是万能之法。
文章浏览阅读127次。java毕业设计超市管理系统Mybatis+系统+数据库+调试部署。前端技术:Layui、HTML、CSS、JS、JQuery等技术。springboot基于springboot食品销售网站。springboot足球青训俱乐部管理后台系统。springboot研究生实验室综合管理系统。springboot基于OO模式的短租平台。springboot酒店物联网平台系统。_mybatis超市管理系统
文章浏览阅读106次。基本的拓扑排序算法。_拓扑排序核心算法
文章浏览阅读2k次。EasyCwmp 安装源代码下载地址为:http://easycwmp.org/download/easycwmp-1.8.6.tar.gz一般参考官网发布版本中README文件就可以成功安装,但是部分同学可能会遇到各种问题,本文按照官方提供的安装方法一步一步安装验证,其中遇到一些依赖库安装问题,已整理到本文安装步骤中。1. OpenWRT Linux 上安装 EasyCwmpEasyCwmp 部分EasyCwmp主要是在OpenWRT Linux平台上开发和测试的。下载:下载 easycwm_easycwmp 安装
文章浏览阅读1.6k次。文章目录10.【HTML全解】HTML标签10.1 视频: 英语小课堂![在这里插入图片描述](https://img-blog.csdnimg.cn/20191127001925570.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3Fx..._npm i sm2
文章浏览阅读3.4k次,点赞4次,收藏6次。如果要使用数组的forEach()方法对其改值时,需要直接通过arr[i]这种方式来更改。请看下面代码: // 数组改值 let arr = [1,3,5,7,9]; arr.forEach(function(item){ item..._foreach循环修改数组的值 js
文章浏览阅读285次。汇总Java基础知识英语面试题
文章浏览阅读1.4k次。项目场景:提示:当前页面分享时 把走势图生成一张图片 并且生成图文分享分享出去:效果图:走势图部分:提示:这部分是走势图部分的代码html:<view class="qiun-charts" > <canvas canvas-id="qykccanvasMixid" id="qykccanvasMixid" class="charts" @error="error" @touchstart="touchMi..._如何做一个走势的小程序
文章浏览阅读1.3k次。先看效果图源码<view style="overflow: hidden;"> <image src='http://static.iswenzi.com/image/headImg.jpg' mode='widthFix' style='width:100%; display: block; filter: blur(2rpx); transform: scale(1.2);'></image></view><view clas_微信小程序自定义头部图片
文章浏览阅读170次。原标题:普林斯顿大学研究生计算机系统专业排名 普林斯顿地处纽约和费城之间,是一座别具特色的乡村都市,小城位于新泽西州西南的特拉华平原,面积约为7平方公里,东濒卡内基湖,西临特拉华河。普林斯顿的景色幽雅,四周绿树成荫、绿草丛丛,清澈的河水环绕着小城静静流淌;普林斯顿人口约为3万,绝大部分市民生活富裕;小城交通方便,距离纽约和费城只需大概1小时车程,加上小城恬静而又安详的生活,浓浓的文化氛围笼罩下的贵..._普林斯顿大学计算机科学
文章浏览阅读88次。Vi编辑器修改文件.bash_profile可解决backspace出现乱码问题 使用SecureCRT或是pietty_ch连接到一台安装有Oracle DB 10g的RHEL4.2的机器,linux使用的shell是..._linux oracle里面上下键为乱码
文章浏览阅读6.2k次。本期的 HTML5 网站大观与大家分享15个精美的 HTML5 清爽简约风格网站。HTML5 是现在Web开发领域的热点,越来越多的开发人员开始使用 HTML5 来开发交互性强、效果出众的Web应用和..._清爽到极致的网站
文章浏览阅读853次,点赞23次,收藏26次。面试前的“练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。我自己是刷了不少面试题的,所以在面试过程中才能够做到心中有数,基本上会清楚面试过程中会问到哪些知识点,高频题又有哪些,所以刷题是面试前期准备过程中非常重要的一点。《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!练手”还是很重要的,所以开始面试之前一定要准备好啊,不然也是耽搁面试官和自己的时间。