mongodb 内存分析

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb 内存分析相关的知识,希望对你有一定的参考价值。

要想了解mongo的内存机制就要先了解linux系统的内存分析。

第一步:先看看linux的内存参数都是怎么说的

             total       used       free     shared    buffers     cached
Mem:         11912       9045       2866          0         90       3406
-/+ buffers/cache:       5549       6363 
Swap:         2047         14       2033

total:物理内存总大小

used:使用了多少

free:剩余多少

buffers:buffers是指高速缓冲区的大小,是一个空间大小的概念,运行程序常用的数据,在第一次运行

               时系统会把它们暂时缓存在一个高速的存储区域,以后再用时就直接从这个区域读取数据供程

               序使用,存取这些数据的介质,因其读写速度比硬盘和内存要快得多,所以,buffers的大小对

               电脑运行速度的影响是很大的,但这些数据重启电脑或关机后就会自动消失。

cached:cached是指缓存的数据,是真正意义上的实在东西,例如你常用的程序,由于一些数据是这些

               程序运行经常要使用到的,系统就会把它们形成文件,缓存到一个特定的位置,下次你再运行

               该程序时,就会自动到缓存的位置读取数据供程序运行使用,存储这些数据的区域是在电脑的

               硬盘上,理论上讲读写速度是不变的,只是节省了寻找这些数据的时间而也,这样也可间接地

               提高了电脑的运行效率。

Swap:当物理内存不够使用的是,系统会在物理硬盘上切割一块空间,当作内存使用。


linux主机的真正可用内存是:真正可用内存=total-used-buffers-cached

系统中显示的used是包括buffers和cached大小的,但是这两个数据是可以被释放的,所以真正使用了多少是:真正使用了的内存=used-buffers-cached



第二步:系统内存说的差不多了,那么我们来看看mongo的内存是怎么和系统配合的。

首先说mongo是一个比较坑但又叫人特别爽的数据库,为什么说坑“是因为它不释放内存,你有100G的内存它也会给你吃满”;为什么说他爽“是因为它把数据放到内存中,所以100w的数据查询会很快”;

那么怎么来判定mongo机器给的内存是否合理呢?下面给出公式:物理内存>mongo索引数据+mongo的热数据    


还可以通过mongostat命令来监控MongoDB的内存使用情况,如下所示:

shell> mongostat
mapped vsize res faults
 940g 1893g 21.9g 0

其中内存相关字段的含义是:

mapped:映射到内存的数据大小

visze:占用的虚拟内存大小

res:占用的物理内存大小

注:如果操作不能在内存中完成,结果faults列的数值不会是0,视大小可能有性能问题。

在上面的结果中,vsize是mapped的两倍,而mapped等于数据文件的大小,所以说vsize是数据文件的两倍,之所以会这样,是因为本例中,MongoDB开启了journal,需要在内存里多映射一次数据文件,如果关闭journal,则vsize和mapped大致相当。


参考文档:http://www.ttlsa.com/mongodb/mongodb-and-memory/

本文出自 “学习改变命运” 博客,请务必保留此出处http://xinsir.blog.51cto.com/5038915/1960750

以上是关于mongodb 内存分析的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 内存分析

变量的内存分析图

Android 插件化VirtualApp 源码分析 ( 目前的 API 现状 | 安装应用源码分析 | 安装按钮执行的操作 | 返回到 HomeActivity 执行的操作 )(代码片段

C 中的共享内存代码片段

详细分析Memcached缓存与Mongodb数据库的优点与作用

14.VisualVM使用详解15.VisualVM堆查看器使用的内存不足19.class文件--文件结构--魔数20.文件结构--常量池21.文件结构访问标志(2个字节)22.类加载机制概(代码片段