mongodb 内存分析

本文涉及的产品
云数据库 MongoDB,通用型 2核4GB
简介:

要想了解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,如需转载请自行联系原作者
相关实践学习
MongoDB数据库入门
MongoDB数据库入门实验。
快速掌握 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
目录
相关文章
|
2月前
|
监控 Java
如何使用VisualVM分析内存泄漏?具体流程看这里
如何使用VisualVM分析内存泄漏?具体流程看这里
|
3月前
|
安全 Linux 编译器
内存泄漏检测组件的分析与实现(linux c)-mtrace工具使用
内存泄漏产生原因 在堆上使用malloc/remalloc/calloc分配了内存空间,但是没有使用free释放对应的空间。
75 0
|
3月前
3.1.2 内存池的实现与场景分析
3.1.2 内存池的实现与场景分析
|
29天前
|
算法 Java C++
【C/C++ 内存知识扩展】内存不足的可能性分析
【C/C++ 内存知识扩展】内存不足的可能性分析
12 0
|
1月前
|
缓存 Java
java使用MAT进行内存分析
java使用MAT进行内存分析
|
1月前
|
存储 缓存 Linux
嵌入式Linux中内存管理详解分析
嵌入式Linux中内存管理详解分析
37 0
|
2月前
|
存储 缓存 算法
Golang高性能内存缓存库BigCache设计与分析
【2月更文挑战第4天】分析Golang高性能内存缓存库BigCache设计
70 0
|
2月前
|
存储 监控 Java
JVM内存泄漏的分析与解决方案
JVM内存泄漏的分析与解决方案
|
2月前
|
测试技术 iOS开发
用Instruments分析内存使用情况
用Instruments分析内存使用情况
|
3月前
|
存储 Java 数据挖掘
来聊聊ThreadLocal内存泄露分析
来聊聊ThreadLocal内存泄露分析