关于 Elasticsearch 内存占用及分配

ES的heap是如何被瓜分掉的 1.Segment Memory Segment不是file吗?segment memory又是什么?前面提到过,一个segment是一个完备的lucene倒排索引,而倒排索引是通过词典(Term Dictionary)到文档列表(Postings List)的映射关系,快速做查询的。由于词典的size会很大,全部装载到heap里不现实,因此Lucene为词典做了一层前缀索引(Term Index),这个索引在Lucene4.0以后采用的数据结构是FST (Finite State Transducer)。 阅读详情

 

 

Elasticsearch 和 Lucene 对内存使用情况:


Elasticsearch 限制的内存大小是 JAVA 堆空间的大小,不包括Lucene 缓存倒排索引数据空间。

  • Lucene 中的 倒排索引 segments 存储在文件中,为提高访问速度,都会把它加载到内存中,从而提高 Lucene 性能。所以建议至少留系统一半内存给Lucene。
  • Node Query Cache (负责缓存f ilter 查询结果),每个节点有一个,被所有 shard 共享,filter query查询结果要么是 yes 要么是no,不涉及 scores 的计算。
    集群中每个节点都要配置,默认为:indices.queries.cache.size:10%
  • Indexing Buffer 索引缓冲区,用于存储新索引的文档,当其被填满时,缓冲区中的文档被写入磁盘中的 segments 中。节点上所有 shard 共享。
    缓冲区默认大小: indices.memory.index_buffer_size: 10%
    如果缓冲区大小设置了百分百则 indices.memory.min_index_buffer_size 用于这是最小值,默认为 48mb。indices.memory.max_index_buffer_size 用于最大大小,无默认值。
  • Shard Request Cache 用于缓存请求结果,但之缓存request size为0的。比如说 hits.total, aggregations 和 suggestions.
    默认最大为indices.requests.cache.size:1%
  • Field Data Cache 字段缓存重要用于对字段进行排序、聚合是使用。因为构建字段数据缓存代价昂贵,所以建议有足够的内存来存储。
    Fielddata 是 延迟 加载。如果你从来没有聚合一个分析字符串,就不会加载 fielddata 到内存中,也就不会使用大量的内存,所以可以考虑分配较小的heap给Elasticsearch。因为heap越小意味着Elasticsearch的GC会比较快,并且预留给Lucene的内存也会比较大。。
    如果没有足够的内存保存fielddata时,Elastisearch会不断地从磁盘加载数据到内存,并剔除掉旧的内存数据。剔除操作会造成严重的磁盘I/O,并且引发大量的GC,会严重影响Elastisearch的性能。

Elasticsearch默认安装后设置的内存是1GB,这是远远不够用于生产环境的。
有两种方式修改Elasticsearch的堆内存:

  • 设置环境变量:export ES_HEAP_SIZE=10g 在es启动时会读取该变量;
  • 启动时作为参数传递给es: ./bin/elasticsearch -Xmx10g -Xms10g
    给es分配内存时要注意,至少要分配一半儿内存留给 Lucene。
    分配给 es 的内存最好不要超过 32G ,因为如果堆大小小于 32 GB,JVM 可以利用指针压缩,这可以大大降低内存的使用:每个指针 4 字节而不是 8 字节。如果大于32G 每个指针占用 8字节,并且会占用更多的内存带宽,降低了cpu性能。

还有一点, 要关闭 swap 内存交换空间,禁用swapping。频繁的swapping 对服务器来说是致命的。
总结:给es JVM栈的内存最好不要超过32G,留给Lucene的内存越大越好,Lucene把所有的segment都缓存起来,会加快全文检索。

参考文档:
https://nereuschen.github.io/2015/09/16/ElasticSearch内存使用分析/
https://www.elastic.co/guide/cn/elasticsearch/guide/current/heap-sizing.html

Rust嵌入式开发环境搭建指南(基于Stm32+Vscode) 本文档旨在指导开发者如何搭建基于Rust语言的STM32嵌入式开发环境。相比传统的C/C++开发方式,Rust提供了更强的内存安全保障和现代化的语言特性,非常适合嵌入式系统开发。本指南将详细介绍从环境搭建到项目配置的全过程,特别关注VSCode作为IDE的配置以及STLink和DAPLink调试器的使用。 阅读详情

相关推荐

保姆级教程:用AdGuard DNS代理实现全设备广告过滤(含Win/Mac/安卓/iOS配置)

本文提供了一份详尽的AdGuard DNS代理配置指南,帮助用户在全设备(Win/Mac/安卓/iOS)上实现广告过滤。通过系统级DNS设置,AdGuard能有效拦截广告、跟踪器和恶意网站,提升隐私保护和浏览效率。教程涵盖原理说明、各平台配置步骤及高级优化技巧,适合不同技术水平的用户。

weixin_42656416的博客 830

(一:原理4)ElasticSearch内存分配以及优化

ElasticSearch内存分配以及优化 1:服务器内存分配 内存消耗大户: 1:Elasticsearch 2:Lucene(全文搜索) 2:内存解释 2.1:Elasticsearch Elasticsearch默认安装后设置的堆内存是1GB,实际业务肯定不够,需要进行配置,不要超过32G 因为如果堆大小小于 32 GB,JVM 可以利用指针压缩,这可以大大降低内存的使用:每个指针 4 字...

weixin_43930865的博客 1万+

Oracle 11g RAC 节点通信故障排查与修复指南

本文详细介绍了Oracle 11g RAC集群发生节点通信故障时的系统性排查与修复方法。当出现节点异常重启时,核心问题往往源于心跳网络中断。文章提供了从快速诊断、日志分析到六层深度检查的完整指南,并给出了针对网络配置、内核参数及Oracle已知Bug等常见根因的实战解决方案,帮助DBA快速恢复集群稳定。

weixin_29246195的博客 281

ELK----介绍 ----部署elasticsearch 和kibana(es内存限制,密码修改),head插件

文章目录#ELK介绍1. 什么是 ELK?2. 什么是 Elasticsearch3. 什么是 Logstash4. 什么是 kibana5. 为什么使用 ELK?一. elasticsearch 部署1. 环境初始化(两台elasticsearch)2. 配置java环境3. elasticsearch 并安装二.二 监控 elasticsearch 集群状态1. 通过 shell 命令获取集群状态2. python 脚本3. zabbix 添加监控二. 部署 logstash1. 环境准备及安装2.

weixin_45697293的博客 995

深入解析report_timing:从基础参数到高级时序路径分析技巧

本文深入解析了静态时序分析(STA)中`report_timing`命令的核心用法与高级技巧。作为芯片设计的关键诊断工具,它能根据SDC约束精准定位时序路径问题。文章从基础参数过滤讲起,详细介绍了如何通过`-from`、`-through`、`-to`等选项定位关键路径,并深入讲解了`-input_pins`、`-nets`、`-transition_time`等高级选项如何揭示延迟细节,以及`-nworst`、`-slack_lesser_than`等过滤排序技巧,旨在帮助工程师高效解读时序报告,优化设计

h6i7j8的博客 1110

SAPGUI excel 导出时遇到的运行时错误:STRING_SIZE_TOO_LARGE

当报表导出需求远超单一 XLSX 文件的物理承载力时,与其在 SAPGUI 中硬拼 2 GB 限制,不如把分页、过滤、流式写入作为设计前提。掌握 ABAP2XLSX 或 CSV + Power Query 等工具链,既能满足审计合规,又能让应用服务器远离的噩梦。祝你在下一次导出海量数据时,既高效又优雅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 643

docker限制elasticsearch的内存

docker限制elasticsearch的内存 docker run -d --name=es2 -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms64m -Xmx512m" elasticsearch:7.6.2 如上表示启动的时候,最大内存512M,最小内存64M

m0_67403076的博客 2258

AUTOSAE软件配置-项目标准配置 (PSC) 导入达芬奇( DaVinci Configurator)

文件是“可拆分的”,这意味着如果格式符合 AUTOSAR 拆分规则,则可以与其他。)是一个ARXML文件,主要由OEM提供,其中包含。)工件,可以作为输入文件导入到达芬奇配置器专业版。导入的参数将以只读方式处理。不允许在多个 ARXML 文件中导入一个。的已存在数据或从输入文件派生的数据。可以作为输入文件导入到另一个。文件会覆盖用户配置的基本。元素和诊断数据预配置。定义 [数据结构]。中,可以导出一个或多个。

m0_49148264的博客 1018

【ElasticSearch】ElasticSearch 内存设置原则

由于ES构建基于lucene,而lucene设计强大之处在于lucene能够很好的利用操作系统内存来缓存索引数据,以提供快速的查询性能。lucene的索引文件segements是存储在单文件中的,并且不可变,对于OS来说,能够很友好地将索引文件保持在cache中,以便快速访问;通过在elasticsearch.yml中bootstrap.memory_lock: true,以保持JVM锁定内存,保证ES的性能。当机器内存小于64G时,遵循通用的原则,50%给ES,50%留给lucene。

ihero的博客 3418

四麦轮机器人精准运动控制系统开发方案

本文提出了一套四麦轮机器人精准运动控制系统的开发方案,基于鲸鱼机器人专业版平台实现高精度的直线行走和平移功能。系统采用双闭环PID控制架构(速度环与距离环),结合编码器和IMU传感器反馈,通过图形化编程与C语言混合开发实现。方案详细阐述了四麦轮运动学模型、控制逻辑设计、传感器数据处理及核心算法实现,目标在3米行程内达到距离误差±10mm、角度偏差±2°的精度。全文涵盖理论分析、系统设计到程序实现的全流程,为机器人精准运动控制提供了完整解决方案。

huanghm88的专栏 275

【QT开发教程】Qt中的跨平台文件系统操作

文件系统操作是应用程序开发中经常需要处理的任务。Qt提供了一套跨平台的文件系统操作API,使开发者能够在不同操作系统上无缝地进行文件和目录操作。本文将介绍Qt中的跨平台文件系统操作,包括基本概念、常用类和方法以及实际示例。

科技改变人类,技术成就未来 983

elasticsearch限制内存设置

当我们用docker发布es容器的时候 如果虚拟机内存太小 有可能会导致虚拟机卡死 所以我们可以通过限制es的内存 来提高虚拟机的效率 docker stats 我们可以先查看一下当前内存占比情况 docker run -d --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -e ES_JAVA_OPTS="-Xms=64m -Xmx=256m" elasticsearch ...

m0_67401499的博客 2563

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

es实战-深入内存以及熔断

在 ES 生产环境中,性能问题一直是各厂商最头疼的问题,而其中的痛点就是内存相关。ES 作为当前搜索引擎市场的 No.1,其显著特点就是检索速度非常快。之所以 ES 检索速度快,离不开其底层的合理存储结构以及对内存的充分利用,其中包括大量的缓存。由于 ES 和其底层依赖的 Lucene 均为内存的使用大户,在生产环境中经常会遇到一些内存相关的问题以及想要优化的欲望,本文主要浅析 ES 内存使用情况和其自带的内存保险——熔断机制。 首先我们会分析一些生产环境中遇到的内存相关问题;然后我们会从 JVM 层面以及

qq_16164711的博客 6214

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

进阶-第96_es生产集群部署之jvm和服务器内存分配的最佳实践以及原理分析

除了之前讲解的一些配置,根据你的集群环境特殊的配置,我们这一讲来讲解最重要的内存的分配,提出一些问题,生产环境部署es,不可避免要回答一个问题,比如我的机器上有64G的内存,或者32G的内存,那么一般来说我应该分配多少个G的内存给es的jvm heap 1、jvm heap分配 es默认会给jvm heap分配2个G的大小,对于几乎所有的生产环境来说,这个内存都太小了。如果用...

qq_35524586的博客 978

docker 启动elasticsearch命令

docker run -e ES_JAVA_OPTS="-Xms256m -Xmx256m" -d -p 9200:9200 -p 9300:9300 --name es elasticsearch:6.7.1 若是开发环境最好给他分配内存,因为,es默认启动占用内存是2g,反正我是舍不得。 ...

weixin_40888910的博客 7415

elastic设置日志保存时间_使用Elasticsearch记录日志踩过的坑经验分享

之前有一个asp.net core项目采用的是Elasticsearch记录日志,使用的是NLog框架的ES target。Nlog.Config.xml:index="lanhu-req-${date:format=yyyy.MM.dd}" documentType="doc" includeAllProperties="true"layout="[${date:format=yyyy-MM-d...

weixin_39624094的博客 1746

Elasticsearch 配置内存量

处理:修改es的配置文件jvm.options,根据服务器情况一般是配置服务器内存的一半。场景:由于配置es之后服务器内存负载过高。原因:初步原因是es内存暂用过高。

fwdwqdwq的博客 1032

ES集群CPU占用高问题总结

es

xiaohuangren_123的博客 3876

ElasticSearch系列(七)es内存大小设置

近期发现线上es服务内存告警,使用率超过90%,需要处理,下面记录下处理流程。 1. 查看进程内存占用情况 使用top命名,可以显示进程列表, 然后键盘按下M键,可以按照内存降序,结果如下: elastic+就是es的进程。 2.查看es配置的内存大小 使用 ps -ef | grep java (或者按照上面的进程号找),显示java进程,如下是es进程: 可以看到es进程启动时设置的java堆内存为-Xms5g -Xmx-5g,也就是5g,这两个参数一般建议设置成一样。 修改之前,这里设置的是6g

雨剑的博客 3万+

es语法-笔记

http://192.168.200.142:9200/_cat/nodes?v ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 1 192.168.200.141 54 96 2 0.05 0.12 0.14 dilmrt - node-2 1 192.168.200.134

Lee_cg的博客 428

ElasticSearch优化系列四:ES的heap是如何被瓜分掉的

ElasticSearch优化系列四:ES的heap是如何被瓜分掉的 字数1784 阅读273 评论3 喜欢2 以下分别解读几个我知道的内存消耗大户: Segment Memory Segment不是file吗?segment memory又是什么?前面提到过,一个segment是一个完备的lucene倒排索引,而倒排索引是通过词典(Term Dictionary)到文档列

张伟的专栏 5106

Elasticsearch Springboot2开发环境下客户端Netty连接占用过多byte[]类型内存问题解决方法

这几天使用elasticsearch构建全文检索服务时,在开发查询接口的时候,内存监控发现应用启动后会占用大量堆内存空间,即使手动GC后,发现内存仍然居高不下。 本来应用在开发阶段本地运行测试时是不手动添加内存上限的,但是当手动限制内存上限(-Xmx)的时候,发现如果分配的最大内存小1G时,经常会出现调用查询的时候应用发出OOM错误。查看内存Dump信息了解到其大量byte类型占据内存中,并被Ne...

k446804791的博客 1810
上一篇: 重新discovery coordinator,然后JoinGroup + SyncGroup
下一篇: Elasticsearch内存那些事儿
王树民
博客等级 码龄10年 912粉丝 560原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值