mongodb 内存分析

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

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

1
2
3
4
              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的内存使用情况,如下所示:

1
2
3
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大致相当。











本文转自 xinsir999 51CTO博客,原文链接:http://blog.51cto.com/xinsir/1960750,如需转载请自行联系原作者
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值