MongoDB内存机制
2012-09-02 22:20
162 查看
Memory Mapped Storage Engine (MMAP)是目前MongoDB唯一的存储引擎,它使用内存映射文件来避免磁盘的IO,操作系统的虚拟内存管理器,下面是MMAP的几个特点:
1、由于是由os来进行内存的管理,所以在文件系统内存和数据库内存之间是没有冗余之分的。
2、MongoDB可以不经过配置自动使用os剩余的内存
3、虚拟内存的大小和驻留内存的大小会显示出MongoDB process 占用很多的内存,这是因为虚拟内存的大小是映射文件和日志文件的总和,常驻数据所占用的内存取决于系统的剩余内存。
4、缓存的数据会使用LRU算法进行部分清除。映射文件的写入也是由操作系统进行控制的。
可以通过db.serverStatus().mem; 查看数据库内存的使用情况;
(刚刚安装的所以基本上没有什么使用率)。
使用shell>mongostat 也是可以的。
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
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
相关文章推荐
- MongoDB内存管理机制
- C/C++ 内存补齐机制
- Android C++层的内存回收机制
- java 内存分配机制
- mongodb引起内存泄露问题
- 大话Linux内核中锁机制之内存屏障、读写自旋锁及顺序锁
- 第十学 linux内核——内存寻址——分页机制(2)
- Android 6.0 新特性剖析【深度优化内存机制"秒杀"IOS系统】
- .NET下的内存分配机制
- Java中的内存处理机制和final、static、final static总结
- Vim 的 Python 接口的内存回收机制有问题 !!!!!
- Python内存管理机制
- c++内存机制
- Memcached 内存分配机制介绍
- MongoDB与内存
- C/C++内存分配机制
- java内存机制
- .NET Framework 自动内存管理机制深入剖析 (C#分析篇)(转)
- java内存管理机制
- 内存管理机制-内存模型与对象的访问