加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 系统 > 正文

如何限制MongoDB对内存的使用?

发布时间:2023-09-20 09:28:57 所属栏目:系统 来源:
导读:最近在线上发现了一些有意思的现象,比如某一台服务器上部署了MySQL和MongoDB的服务,然后内存报警,说是内存已经使用了超过85%了,这个时候,通常我们会想到迁移服务。将MySQL或者MongoDB的服务切换到其他的机器上,
最近在线上发现了一些有意思的现象,比如某一台服务器上部署了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%左右。

cacheSizeGB参数配置的注意事项

几点建议:
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 内存内容大家可以继续关注其他文章。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章