MongoDB内存机制

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介:

Memory Mapped Storage Engine (MMAP)是目前MongoDB唯一的存储引擎,它使用内存映射文件来避免磁盘的IO,操作系统的虚拟内存管理器,下面是MMAP的几个特点:
1、由于是由os来进行内存的管理,所以在文件系统内存和数据库内存之间是没有冗余之分的。
2、MongoDB可以不经过配置自动使用os剩余的内存
3、虚拟内存的大小和驻留内存的大小会显示出MongoDB process 占用很多的内存,这是因为虚拟内存的大小是映射文件和日志文件的总和,常驻数据所占用的内存取决于系统的剩余内存。
4、缓存的数据会使用LRU算法进行部分清除。映射文件的写入也是由操作系统进行控制的。

可以通过db.serverStatus().mem; 查看数据库内存的使用情况;

 db.serverStatus().mem;
{
"bits" : 32,
"resident" : 23,
"virtual" : 107,
"supported" : true,
"mapped" : 0
}

(刚刚安装的所以基本上没有什么使用率)。
使用shell>mongostat 也是可以的。

Sun Sep 2 21:55:59 [initandlisten] connection accepted from 127.0.0.1:54693 #3 (1 connection now open)
insert query update delete getmore command flushes mapped vsize res faults locked db idx miss % qr|qw ar|aw netIn netOut conn time
0 0 0 0 0 1 0 0m 107m 23m 0 local:0.0% 0 0|0 0|0 62b 1k 1 21:56:00
0 0 0 0 0 1 0 0m 107m 23m 0 local:0.0% 0 0|0 0|0 62b 1k 1 21:56:01

Mongodb 每个连接内存使用情况:
每个连接启用一个线程,每个线程有一个具有几MB大小的堆栈。如果某个线程已经停止使用,那么os就会把它的堆栈剩余的部分交换出去。
Binary footprint:
通过启动一个新的MongoDB实例,在没有任何连接,没有任何数据的情况下,我们可以得到the “inherent” memory 占有率的情况。

基于以上的说明,我们有时候需要控制Mongodb占用的内存.(最好不要把其他服务和Mongodb放在一起).
即便MongoDB使用的是64位操作系统,也有可能遇到linux OOM的问题.大部分情况下是限制了虚拟内存的大小所致. 可以通过 ulimit -a | grep 'virtual' 进行查看:
virtual memory (kbytes, -v) unlimited 
大部分的操作系统是没有限制的.
MongoDB连接数过多的话,也可能影响性能,连接数可以这样查询:
> db.serverStatus().connections{ "current" : 1, "available" : 818 }每个线程都需要一个stack,如果默认stack比较大的话,视情况减小.通过一下命令来释放掉MongoDB占用的内存.db.runCommand({closeAllDatabases:1})

 参考:http://www.mongodb.org/display/DOCS/Caching

       http://www.searchdatabase.com.cn/showcontent_51990.htm






本文转自 位鹏飞 51CTO博客,原文链接:http://blog.51cto.com/weipengfei/980238,如需转载请自行联系原作者

相关实践学习
快速掌握 MongoDB 数据库
本课程主要讲解MongoDB数据库的基本知识,包括MongoDB数据库的安装、配置、服务的启动、数据的CRUD操作函数使用、MongoDB索引的使用(唯一索引、地理索引、过期索引、全文索引等)、MapReduce操作实现、用户管理、Java对MongoDB的操作支持(基于2.x驱动与3.x驱动的完全讲解)。 通过学习此课程,读者将具备MongoDB数据库的开发能力,并且能够使用MongoDB进行项目开发。   相关的阿里云产品:云数据库 MongoDB版 云数据库MongoDB版支持ReplicaSet和Sharding两种部署架构,具备安全审计,时间点备份等多项企业能力。在互联网、物联网、游戏、金融等领域被广泛采用。 云数据库MongoDB版(ApsaraDB for MongoDB)完全兼容MongoDB协议,基于飞天分布式系统和高可靠存储引擎,提供多节点高可用架构、弹性扩容、容灾、备份回滚、性能优化等解决方案。 产品详情: https://www.aliyun.com/product/mongodb
目录
相关文章
|
5天前
|
存储 缓存
操作系统的虚拟内存管理机制
在现代计算机系统中,虚拟内存是一种至关重要的内存管理技术。它允许操作系统使用硬盘空间来扩展物理内存容量,从而支持更多并发运行的程序。本文将深入探讨虚拟内存的概念、实现方式以及其在操作系统中的作用和重要性。
|
7天前
|
缓存 算法 Linux
深入理解操作系统的内存管理机制
【6月更文挑战第23天】内存管理是操作系统中一个至关重要的功能,它直接影响到系统性能和资源利用效率。本文旨在深入探讨现代操作系统中内存管理的核心概念、关键技术以及面临的挑战。通过分析内存管理的基本原理、内存分配策略、虚拟内存技术、缓存管理和内存安全等方面,揭示内存管理在提升操作系统稳定性、安全性与高效性方面的作用。文章将结合具体操作系统实例,如Windows、Linux等,阐述不同内存管理技术的实现细节和优化策略,为读者提供对操作系统内存管理机制全面而深刻的认识。
18 3
|
9天前
|
存储 缓存 算法
探索现代操作系统的虚拟内存管理机制
【6月更文挑战第21天】在数字时代的浪潮中,操作系统作为计算机系统的核心,其设计和管理策略直接影响着计算效率和用户体验。本文将深入探讨现代操作系统中的虚拟内存管理机制,包括其工作原理、实现方式及其对系统性能的影响。通过分析虚拟内存技术如何优化资源分配、提高多任务处理能力及对硬件资源的抽象管理,揭示其在现代操作系统中的重要性和应用价值。
|
8天前
|
算法 Java 开发者
深入理解Python的内存管理机制
Python 以其简单易学的语法和强大的功能深受开发者欢迎。然而,许多开发者在使用 Python 时并不了解其背后的内存管理机制。本文旨在深入探讨 Python 的内存管理,包括对象的生命周期、引用计数以及垃圾回收机制,从而帮助开发者编写出更加高效和稳定的代码。
|
10天前
|
Java Go
Go 中 slice 的内存管理机制
Go 中 slice 的内存管理机制
|
11天前
|
存储 算法
深入理解操作系统的内存管理机制
【6月更文挑战第19天】本文旨在探讨现代操作系统中内存管理的关键技术和策略,分析其对系统性能及稳定性的影响。通过介绍分页、分段、虚拟内存等概念,揭示操作系统如何有效管理物理与虚拟内存资源,以及这些技术在多任务处理和内存保护方面的应用。文章将重点讨论内存泄漏、碎片整理和页面置换算法等高级主题,以期为读者提供对内存管理复杂性及其解决方案的深刻理解。
13 2
|
12天前
|
算法 安全 调度
深入理解操作系统的虚拟内存管理机制
【6月更文挑战第18天】在现代计算机系统中,虚拟内存是实现多任务处理和内存保护的关键技术。本文将深入探讨操作系统如何通过虚拟内存管理机制来优化物理资源的使用,提高系统效率,并确保进程间的隔离与安全。我们将从虚拟内存的基本概念出发,逐步解析分页、分段、内存交换以及页面替换算法等核心组件,揭示它们如何协同工作以支撑起整个系统的内存需求。
|
13天前
|
算法 Java
Java垃圾回收(Garbage Collection,GC)是Java虚拟机(JVM)的一种自动内存管理机制,用于在运行时自动回收不再使用的对象所占的内存空间
【6月更文挑战第18天】Java的GC自动回收内存,包括标记清除(产生碎片)、复制(效率低)、标记整理(兼顾连续性与效率)和分代收集(区分新生代和老年代,用不同算法优化)等策略。现代JVM通常采用分代收集,以平衡性能和内存利用率。
38 3
|
16天前
|
监控 算法 安全
深入理解操作系统的内存管理机制
在数字时代的心脏,内存管理扮演着至关重要的角色。它是操作系统中的一项核心功能,负责协调、监控和控制计算机系统中的内存资源分配与回收。本文将深入探讨内存管理的基本原理、关键算法以及它在现代操作系统中的实现方式,揭示如何有效地利用和管理内存资源以优化系统性能和稳定性。
|
4天前
|
存储 缓存 算法
深入理解操作系统之内存管理机制
【6月更文挑战第25天】内存是计算机系统中至关重要的资源,其管理效率直接关系到系统性能。本文旨在探讨操作系统中内存管理的基本原理、关键技术以及面临的挑战,通过分析不同的内存管理策略,揭示内存分配与回收的复杂性,并讨论虚拟内存技术的实现细节及其在现代操作系统中的应用。文章将着重于内存管理对系统稳定性的影响,并提出未来内存技术的发展方向。