MongoDB如何限制对内存使用及查看内存使用情况?
Admin 2021-04-29 群英技术资讯 685 次浏览
在MongoDB中,加载各种依赖的lib到内存、管理客户端请求、元数据管理存储等工作都需要占用内存,但其实内存使用的大部分还是在存储引擎和客户端连接请求处理方面。
一方面是存储引擎的cache,通常情况下,我们可以使用参数cacheSizeGB参数(下面会讲到)来控制内存使用率,一旦超过这个内存使用率,则MongoDB的存储引擎会淘汰掉部分内存中的数据页。
正常运行的MongoDB实例,内存使用率大约为80%的cacheSizeGB参数值,因为超过80%之后,内存淘汰策略就开始淘汰过期的数据页了,如果出现使用率过大,则多半表示当前实例内存淘汰的压力比较大。请求就有延时的可能。
另一方面,如果客户端的连接数过多,建立过多的tcp链接,这些连接的维护,需要有read buffer和write buffer以用来收发网络包,所以也会产生开销。每个连接占用的内存大小约为2MB左右。
最近在线上发现了一些有意思的现象,比如某一台服务器上部署了MySQL和MongoDB的服务,然后内存报警,说是内存已经使用了超过85%了,这个时候,通常我们会想到迁移服务。将MySQL或者MongoDB的服务切换到其他的机器上,这样,服务器的内存就可以节省下来。
但是实际的现象就是,如果我们迁移了MySQL的服务之后,服务器的内存临时会降下来,但是一段时间过后,又会报警,因为MongoDB已经将MySQL腾出来的内存空间也占用完了。
我们知道,在MySQL中,占用内存比较多的就是innodb_buffer_pool,还有一堆其他的buffer,除此之外,连接数也是一个需要考虑的因素。
在MongoDB中,如果我们不限制MongoDB的内存使用,那么MongoDB就会尽可能的占用更多的内存来提高读写性能。具体的策略如下:
从MongoDB3.4开始, WiredTiger存储引擎默认的cache size是下面2个值中较大的一个。
公式一:0.5*(物理内存-1GB)
公式二:256MB
例如,物理内存4G,则cache size=1.5GB,如果物理内存1.5G,则cache size=0.5*(1.5-1)=250MB < 256MB ,所以取值为256MB
MongoDB中可以通过配置文件的内容限定MongoDB所使用的内存,关键参数如下:
storage: wiredTiger: engineConfig: cacheSizeGB: <number> # 单位是GB,浮点型 journalCompressor: <string> directoryForIndexes: <boolean> maxCacheOverflowFileSizeGB: <number> collectionConfig: blockCompressor: <string> indexConfig: prefixCompression: <boolean>
上面的参数,一般情况下,单机单实例,建议配置在内存的60%左右。
几点建议:
1、不要增加WiredTiger的内部cache size超过默认值
2、WiredTiger存储引擎使用WiredTiger内部缓存和文件系统缓存
3、WiredTiger会自动使用所有剩余的文件系统缓存
4、单机多实例请务必减少mongod的内存分配值
db.hostInfo()
这个命令可以查看MongoDB的内存限制情况,查看结果如下:
SECONDARY> db.hostInfo() { "system" : { "currentTime" : ISODate("2020-12-31T03:51:28.278Z"), "hostname" : "localhost.localdomain:24204", "cpuAddrSize" : 64, "memSizeMB" : 64393, "numCores" : 8, "cpuArch" : "x86_64", "numaEnabled" : false },
以上就是关于MongoDB 内存的相关介绍的,希望对大家学习有帮助,更多MongoDB 内存内容大家可以继续关注其他文章。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章给大家分享的是MongoDB中的增删改查方法的相关内容。小编觉得挺实用的,因此分享给大家做个参考,文中示例有一定的参考价值,感兴趣的朋友接下来一起跟随小编看看吧。
mongodb更新失败表示更新操作没有更新到任何数据,而且官网表示并不保证更新操作的成功性。解决方法:使用多线程并发更新,如果更新失败就进入其他线程重试更新,如此更新失败率就大大降低。
mongodb是一个基于分布式文件存储的数据库,如果使用过mongodb,应该了解新安装的mongodb是没有账号设置的,也就意味着任何人都能够连接mongodb,这是很不安全的,因此为能够有效保证数据的安全,我们需要对mongodb进行设置账号,来控制对数据库的访问。这篇文章我们就一起来了解一下MongoDB访问控制的操作方法。
这篇文章主要给大家介绍的是关于在MongoDB中MapReduce的使用,小编认为是比较实用的,因此分享给大家作参考,需要的朋友可以看看,希望对大家学习有帮助。
mac环境下mongodb启动失败的解决方法:1、随便进入一个文件夹;2、用mkdir创建mongo文件夹;3、用cd进入创建的文件夹;4、用mkdir在新创建的文件夹里面创建db文件夹;5、运行mongod,并且使用——dbpath。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008