返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >MongoDB 内存管理相关总结
  • 276
分享到

MongoDB 内存管理相关总结

2024-04-02 19:04:59 276人浏览 八月长安
摘要

目录mongoDB的内存用在哪儿?如何限制MonGoDB对内存的使用?cacheSizeGB参数配置的注意事项如何查看内存使用情况?MongoDB的内存用在哪儿?  &nb

MongoDB的内存用在哪儿?

   在MongoDB中,加载各种依赖的lib到内存、管理客户端请求、元数据管理存储等工作都需要占用内存,但其实内存使用的大部分还是在存储引擎和客户端连接请求处理方面。

   一方面是存储引擎的cache,通常情况下,我们可以使用参数cacheSizeGB参数(下面会讲到)来控制内存使用率,一旦超过这个内存使用率,则MongoDB的存储引擎会淘汰掉部分内存中的数据页。

   正常运行的MongoDB实例,内存使用率大约为80%的cacheSizeGB参数值,因为超过80%之后,内存淘汰策略就开始淘汰过期的数据页了,如果出现使用率过大,则多半表示当前实例内存淘汰的压力比较大。请求就有延时的可能。

   另一方面,如果客户端的连接数过多,建立过多的tcp链接,这些连接的维护,需要有read buffer和write buffer以用来收发网络包,所以也会产生开销。每个连接占用的内存大小约为2MB左右。

如何限制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 内存管理的资料请关注编程网其它相关文章!

--结束END--

本文标题: MongoDB 内存管理相关总结

本文链接: https://lsjlt.com/news/122307.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • MongoDB 内存管理相关总结
    目录MongoDB的内存用在哪儿?如何限制MongoDB对内存的使用?cacheSizeGB参数配置的注意事项如何查看内存使用情况?MongoDB的内存用在哪儿?  &nb...
    99+
    2024-04-02
  • mongodb的内存总结
    纯手打,只是总结了通过多种方式查看mongodb的内存使用情况,并没能提出有效的减少mongodb的内存的方法。都说mongodb吃内存比较厉害,确实很厉害,我的数据级别到达了 4千万,数据量大概是140G...
    99+
    2024-04-02
  • MongoDB 主分片(primary shard)相关总结
    目录01 主分片是什么?02 如何迁移主分片01 主分片是什么?   分片集群中的每一个数据库都有一个主分片,这个主分片上保存了当前数据库中没有被分片的集合的数据,主分片(...
    99+
    2024-04-02
  • Linux文件管理的相关命令总结
    这篇文章主要讲解了“Linux文件管理的相关命令总结”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Linux文件管理的相关命令总结”吧!$ls .是list的简写,列出当前目录下的所有文件名...
    99+
    2023-06-05
  • C++技术中的内存管理:内存管理最佳实践总结
    内存管理在 c++++ 中至关重要,遵循最佳实践可避免内存泄漏和数据损坏等问题。这些实践包括:使用智能指针(如 unique_ptr 和 shared_ptr)自动化内存分配和释放。避免...
    99+
    2024-05-07
    c++ 内存管理 作用域
  • Java内存模型之重排序的相关知识总结
    目录一、数据依赖性二、as-if-serial语义三、程序顺序规则四、重排序对多线程的影响一、数据依赖性 如果两个操作访问同一个变量,而且这两个操作中有一个操作为写操作,此时这两个操...
    99+
    2024-04-02
  • C语言动态内存管理分析总结
    目录什么是动态内存分配动态内存函数的介绍freemalloccallocrealloc动态内存管理中常见的错误对NULL指针的解引用操作对动态开辟空间的越界访问对非动态开辟内存使用f...
    99+
    2024-04-02
  • Mongodb七天总结—权限管理(2)
    Mongodb权限管理版本:Mongodb3.0说到对数据库我安全问题我们一般就会从以下几点考虑怎么去解决数据库安全的问题。1.最安全的是物理隔离:2.网络隔离:3.防火墙隔离:4.用户名和密码: ...
    99+
    2024-04-02
  • linux内存管理相关的函数有哪些
    这篇文章主要介绍“linux内存管理相关的函数有哪些”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“linux内存管理相关的函数有哪些”文章能帮助大家解决问题。 ...
    99+
    2023-04-20
    linux
  • 总结HTML相关知识
    这篇文章主要介绍“总结HTML相关知识”,在日常操作中,相信很多人在总结HTML相关知识问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”总结HTML相关知识”的疑惑有所帮助!接...
    99+
    2024-04-02
  • C语言 超详细梳理总结动态内存管理
    目录一.为什么存在动态内存分配二.动态内存函数的介绍1.malloc和free2.calloc3.realloc三.常见的动态内存错误1.对NULL指针的解引用操作2.对动态开辟空间...
    99+
    2024-04-02
  • PHP垃圾回收及内存管理相关内容有哪些
    这篇文章主要讲解了“PHP垃圾回收及内存管理相关内容有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PHP垃圾回收及内存管理相关内容有哪些”吧!PHP 垃圾回收与内存管理指引本文将要讲述...
    99+
    2023-06-21
  • C++中4种管理数据内存的方式总结
    目录C++的4种管理数据内存的方式自动存储静态存储动态存储线程存储栈、堆、内存泄漏根据用于分配内存的方法,C++中有3中管理数据内存的方式:自动存储、静态存储和动态存储(有时也叫做自...
    99+
    2024-04-02
  • MySQL InnoDB 锁的相关总结
    1.  Shared and Exclusive Locks shared lock (译:共享锁) exclusive lock (译:排它锁、独占锁) InnoDB实现了标准的行级锁,其中有两种类型的锁...
    99+
    2022-05-16
    MySQL InnoDB InnoDB锁
  • mysql字符集相关总结
    这边笔记主要记录一下对mysql字符集相关知识的学习 字符集 一般我们使用如下语句创建一张表,创建表的时候指定了charset为utf8编码。 CREATE TABLE `test` ( `c1` int U...
    99+
    2022-05-22
    MySQL 字符集
  • mysql的相关设置总结
    下文给大家带来关于mysql的相关设置总结,感兴趣的话就一起来看看这篇文章吧,相信看完mysql的相关设置总结对大家多少有点帮助吧。1.安装MySQL    使用管理...
    99+
    2024-04-02
  • Spring Cache相关知识总结
    简介  Spring 从 3.1 开始定义了 org.springframework.cache.Cache 和 org.springframework.cache.Cac...
    99+
    2024-04-02
  • HTML相关知识点总结
    目录简介HTML文档和网页的关系呢?HTML的标签样子?HTML基本概念标签元素属性注释编码规则HTML常用元素标题段落链接跳转页面:跳转锚点图片列表有序列表无序列表定义列表表格块表...
    99+
    2024-04-02
  • Android Insets相关知识总结
    目录什么是Insets?Insets相关类InsetsStateInsetsStateControllerInsetsSourceInsetsSourceConsumer(ImeIn...
    99+
    2024-04-02
  • MySql 存储引擎和索引相关知识总结
    存储引擎 什么是数据库存储引擎? 数据库引擎是数据库底层软件组件,不同的存储引擎提供不同的存储机制,索引技巧,锁定水平等功能,使用不同的数据库引擎,可以获得特定的功能 如何查看引擎? --如何查看数据库支持的引...
    99+
    2022-05-11
    MySql 存储引擎 MySql 索引 MySql 存储引擎和索引
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作