首页 > 数据库 > MongoDB > 正文

MongoDB如何限制对内存使用及查看内存运用情况?

2024-09-07 00:22:35
字体:
来源:转载
供稿:网友
        这篇文章主要给大家MongoDB 内存的相关内容,包括MongoDB的内存用在哪?如何限制MongoDB对内存的使用?如何查看MongoDB 内存的使用情况?等等,感兴趣的朋友就继续往下看吧。
MongoDB的内存用在哪儿?
        在MongoDB中,加载各种依赖的lib到内存、管理客户端请求、元数据管理存储等工作都需要占用内存,但其实内存使用的大部分还是在存储引擎和客户端连接请求处理方面。
 
        一方面是存储引擎的cache,通常情况下,我们可以使用参数cacheSizeGB参数(下面会讲到)来控制内存使用率,一旦超过这个内存使用率,则MongoDB的存储引擎会淘汰掉部分内存中的数据页。
 
        另一方面,如果客户端的连接数过多,建立过多的tcp链接,这些连接的维护,需要有read buffer和write buffer以用来收发网络包,所以也会产生开销。每个连接占用的内存大小约为2MB左右。
 
        我们知道,在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
  },

(编辑:武林网)

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表