怎么解决elasticsearch集群占用太多虚拟内存(VIRT)的问题?占用了几十个G,有什么可以对它进行限制的相关设置吗?
Elasticsearch | 作者 ESWorker | 发布于2018年03月31日 | 阅读数:12158
我这里是es5.6.4版本的,有十个节点,都是64G内存的配置,集群启动后,具体表现在用top命令查看,发现虚拟内存有70G,80G,严重影响到其他任务的正常运行。
查了官方文档说是从索引文件映射的方式是MMap,会使用到大量虚拟内存,然后就没下文了。
难道默认就是无限制的,虚拟内存会随着集群索引数据量的增长而无限增长吗?
怎么限制住对虚拟内存的占用?
请教各位大神帮忙解答一下。
查了官方文档说是从索引文件映射的方式是MMap,会使用到大量虚拟内存,然后就没下文了。
难道默认就是无限制的,虚拟内存会随着集群索引数据量的增长而无限增长吗?
怎么限制住对虚拟内存的占用?
请教各位大神帮忙解答一下。
5 个回复
medcl - 今晚打老虎。
赞同来自: laoyang360 、ESWorker 、zsgking 、lbx6z 、machao 、Merrizee 、artisan更多 »
如果没有实际占用,哪些都只是个数字,不用担心。
给 Elasticsearch 设置内存不是越大越好,要根据实际的使用需求来设置,你可以一开始大一点,然后看看实际的生产环境上,
在实际的查询和压力下看看,在一段时间的观察下,具体是跑了多少内存,不够就调大,占用率低就减少内存的分配,
把更多的内存留给系统做分页缓存更好。堆如果设置越大,垃圾堆积起来的 GC 压力会自然增大,也会造成偶尔的 GC 时间变长,影响 ES。
kennywu76 - Wood
赞同来自: famoss 、ESWorker 、machao 、derobukal 、JiangJibo
根据经验,如果按照官方的建议,给ES heap的内存少于机器可用物理内存的一半,通常不会有什么问题。 实际生产环境种,我们遇到过的相关问题场景: 预留的物理内存大大少于ES heap内存,从而在做大的查询聚合时,因为物理内存紧缺,mmap引起高频度的page in/page out,性能变得很差。
strglee
赞同来自: ESWorker
es 5之前使用mmapfs读取索引文件的部分,而5.0以后改为用mmapfs读取索引文件的全部,大范围的数据搜索可能造成过高的磁盘读IO
这是github上的一些讨论 可以看一下
laoyang360 - Elastic认证工程师 [死磕Elasitcsearch]知识星球地址:https://t.cn/RmwM3N9;微信公众号:铭毅天下; 博客:https://elastic.blog.csdn.net
赞同来自: ESWorker
注意:
最大可分配堆内存大小为:
32GB与当前ES宿主机内存二者的最小值。
举例1):ES宿主机内存:128GB,可供分配的堆内存:32GB。(建议31GB)
举例2):ES宿主机内存:32GB,可供分配的堆内存:16GB。
renwanhui
赞同来自: