MongoDB 内存使用情况分析

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson 格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数 据库单表查询的绝大部分功能,而且还支持对数据建立索引。

先 ps 一下看看。

复制代码 代码如下:

$ ps aux|grep mongod
mongo 26994 9.0 20.0 797264324 13243052 ? Sl May16 117:03 /path/to/mongodb/bin/mongod

总共 760G 多的虚拟内存,但是物理内存就只有 12.6G 。这个机器可是有 64G 内存的哦,这看起来 MongoDB 完全没用多少内存嘛。

再看看 free 的结果。

复制代码 代码如下:

$ free -m
total used free shared buffers cached
Mem: 64544 64279 265 0 134 60413
-/+ buffers/cache: 3731 60813
Swap: 31999 0 31999

内存倒是占得差不多了,基本都是 cached ,也就是文件系统缓存。MongoDB 是通过 mmap 方式让操作系统来处理持久化和缓存的。每个数据文件都直接映射到某个虚拟内存地址。访问的时候如果这一页不在内存中,系统就会尝试把这一页加载进来。这些 内存都是算进 cache 里的。在 mongodb 的官方文档里有这样一个说法,top 或 ps 里的 RSIZE 段显示的是机器的全部内存大小,因为 mongodb 会尽可能占用全部内存。但是事实上,这些缓存并没有算在里面。因此在 top 或 ps 中是看不出 MongoDB 的实际内存使用情况的。而 free 虽然可以看到系统的内存使用情况,但是没法确定这些内存里究竟有多少真的是 MongoDB 使用的。

还好有人做了 vmtouch 这个工具。可以检查文件在缓存中的情况,另外也可以把文件直接加载进缓存或者踢出去。只需要对 MongoDB 的所有数据文件检查一下缓存加载情况,就可以知道 MongoDB 到底缓存了多少数据了。

复制代码 代码如下:

$ vmtouch -m4G /path/to/mongodb/data/
Files: 256
Directories: 3
Resident Pages: 15465901/100219772 58G/382G 15.4%
Elapsed: 4.072 seconds

这里 -m4G 是 vmtouch 检查的文件大小限制。MongoDB 的数据文件比较大,通常会超过默认的 500M。这样看来,缓存用了 58G,这还差不多。Resident Pages 左侧的数字是页的数量,页的数量乘以文件系统页大小才是内存使用量。页的大小可以通过

复制代码 代码如下:

getconf PAGESIZE

查看,通常是 4096,也就是 4KB。

MongoDB 在 NUMA 的机器上运行,并且内存被固定到一个 node 的时候,会有一个警告

复制代码 代码如下:

WARNING: You are running on a NUMA machine.
We suggest launching mongod like this to avoid performance problems:
numactl –interleave=all mongod [other options]

也许是认为,这种情况下只能用上一个节点的内存。但 MongoDB 的缓存是由操作系统管理的。NUMA 似乎对此并没有影响。而内存不太小的时候 MongoDB 本身很难用掉一个节点的内存。这种情况下,是否开启 numactl –interleave=all 作用已经不大了。能做的也许只能是加内存,sharding,或者换 ssd 了。

(0)

相关推荐

  • 查看LINUX进程内存占用情况

    (1)top top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器 可以直接使用top命令后,查看%MEM的内容。可以选择按进程查看或 ...

  • 在Linux中可视化显示内存占用情况的方法

    物理内存不足对Linux桌面系统和服务器系统的性能影响都很大.当你的计算机变慢时,要做的第一件事就是释放内存.尤其是在多用户环境以及执行关键任务的服务器环境下,内存消耗会变得更加关键,因为多个用户和应 ...

  • 查看Linux系统进程内存占用情况

    可以直接使用top命令后,查看%MEM的内容.可以选择按进程查看或者按用户查看,如想查看oracle用户的进程内存使用情况的话可以使用如下的命令: (1)top top命令是Linux下常用的性能分析 ...

  • 内存条坏掉后电脑出现的情况分析

    关于内存出问题后,电脑会有什么情况的问题,其实有很多情况,大致为以下几种: 1、内存插上后主板报警。这种情况是无法开机的。这是属于内存坏了情况。 2、在开机后出现000x000000蓝屏的类似情况,这 ...

  • 用来查看linux内存使用情况的shell脚本

    在 linux 中,/proc/$PID/status 文件提供了该进程资源(内存,堆栈,信号量,子父进程)的使用情况,虽然linux提供了不少查看内存的命令,但都是看整体的使用情况,无法对单个进程的 ...

  • 怎么查看win7内存占用情况

    怎么查看win7内存占用情况?下面小编就为大家介绍: 首先,我们要在平时日常应用中观察物理内存使用情况; 保障平时应用软件正常运行状态下,查看内存使用情况, 而不是刚开机或关闭程序后,再查看. 按&q ...

  • Chrome浏览器怎么查看内存占用情况

      Chrome浏览器怎么查看内存占用情况 首先,启动Chrome浏览器. 在Chrome浏览器的标题栏空白处右击鼠标,再在弹出的菜单中选择"任务管理器". 在打开的Chrome的 ...

  • 如何查看华为手机内存使用情况?

    内存使用情况对手机来说是非常重要的,一旦使用过大将导致手机卡顿,接下来小编就给大家介绍一下如何查看华为手机内存使用情况.具体如下:1. 首先第一步打开电脑中的[设置]App.2. 第二步进入[设置]页 ...

  • 电脑中的内存使用情况怎么查看

    今天我们借助鲁大师软件,来给大家介绍一下电脑中CPU的使用情况怎么查看的具体操作步骤.没有该软件的,请大家自行下载安装.1. 打开电脑,找到桌面上的鲁大师软件.2. 双击将软件打开.3. 在打开的主页 ...