怎么又是你

Elasticsearch写入数据内存飙升

Elasticsearch | 作者 myc | 发布于2020年06月02日 | 阅读数:305

Elasticsearch写入数据时内存飙升,jvm老年代不会gc,但当堆内存占用75%以上时,老年代gc,然后堆内存直接变成es刚启动时的状态,请问下这是什么原因啊,在写入数据时,无其他操作es。
Elasticsearch版本:7.4.2
kibanna版本:7.4.2
操作系统:windows
企业微信截图_15910781044792_(1).png
已邀请:

byx313 - BLOG:https://www.jianshu.com/u/43fd06f9589c

赞同来自:

这个是正常的呀,gc自己回收掉了。

Joshua

赞同来自:

大批量写入数据的时候内存增加是正常的,会生成大量的临时对象,对年轻代的压力比较大

laoyang360 - Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:http://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net

赞同来自:

来自腾讯的分享解决您的疑问:
堆内存就是由 JVM (JAVA 虚拟机)管理的内存。建立在堆内存中的对象有生命周期管理机制,由垃圾回收机时自动回收过期对象占用的内存。

堆外内存是由用户程序管理的内存,堆外内存中的对象过期时,需要由用户代码显示释放。
了解了 JAVA 堆内存后,我们看,能否通过调整运营策略来提升堆内存容量呢?

堆内存分配大一点行不行?超过 32GB,指针压缩失效,内存浪费, 50GB 堆内存性能与 31GB 接近且垃圾回收压力大,也影响性能;

多节点部署提高堆内存总量是否可行?多节点部署,占用机器量更大,用户成本上升大客户节点数过多( 几百个 ),集群元数据管理瓶颈,可用性下降 反向推动云上用户拆分集群,阻力很大。

所以,简单的运营侧策略调整无法解决堆内存使用率过高的问题。那么我们就需要确认 ES 的堆内存是被什么数据占用了,能否优化。

2. 堆内存被什么数据占用了?

我们对线上集群的堆内存分布情况做统计分析后,发现绝大部分堆内存主要被 FST( Finite State Transducer )占用了:

FST 内存占用量占分堆内存总量的 50% ~ 70%

FST 与 磁盘数据量成正比:10TB 磁盘数据量,其对应的 FST 内存占用量在 10GB ~ 15GB 左右。

从这里看基本就知道写入数据多,堆内存肯定会使用率高!

要回复问题请先登录注册