mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置

转载自勤奋的小青蛙

mongodb占用内存非常高,这是因为官方为了提升存储的效率,设计就这么设计的。

但是大部分的个人开发者所购买的服务器内存并没有那么大,所以,我们需要配置下MongoDB的内存缓存大小,不然mongodb会占用非常多。

官方的配置缓存项处文档是这么解释的:

WiredTiger Options

--wiredTigerCacheSizeGB number

New in version 3.0.

Defines the maximum size of the internal cache that WiredTiger will use for all data.

With WiredTiger, MongoDB utilizes both the WiredTiger internal cache and the filesystem cache.

Changed in version 3.2: Starting in MongoDB 3.2, the WiredTiger internal cache, by default, will use the larger of either:

  • 60% of RAM minus 1 GB, or
  • 1 GB.

mongodb会尽可能的把所有的数据都缓存,以便提高效率。

以mongodb 3.2为例,WiredTiger内部缓存,默认会用掉

  • 60% * 内存 - 1GB
  • 1GB

当你的内存大于1GB,mongodb会用掉 内存的60% - 1GB 的内存作为缓存;

当你的内存小于1GB,mongodb会直接用掉1GB。

另外,MongoDB 3.4与3.2也是有区别的,MongoDB 3.4该配置项为:

storage.wiredTiger.engineConfig.cacheSizeGB

Type: float

The maximum size of the internal cache that WiredTiger will use for all data.

Changed in version 3.4: Values can range from 256MB to 10TB and can be a float. In addition, the default value has also changed.

Starting in 3.4, the WiredTiger internal cache, by default, will use the larger of either:

  • 50% of RAM minus 1 GB, or
  • 256 MB.

这样显然很不合理,对于大部分的个人开发,内存是宝贵的。所以,我们需要配置为MB。

配置项参考此处配置:WiredTiger cache size is only configurable in whole gigabytes.

下面是修改后的配置:/etc/mongod.conf

?
1
2
3
4
5
6
7
8
9
10
11
12
# Where and how to store data.
storage:
  dbPath: /var/lib/mongo
  #dbPath: /mongodata
  journal:
    enabled: true
#  engine:
  mmapv1:
    smallFiles: true
  wiredTiger:
    engineConfig:
      configString : cache_size=512M

其实重点就是下面一项,配置之后,重启mongodb生效:

?
1
2
3
wiredTiger:
    engineConfig:
      configString : cache_size=512M

原创文章,转载请注明: 转载自勤奋的小青蛙

发现一只32G内存的服务器,上边跑了几个 sharding 模式的 mongod,把内存吃到只剩下4G,8G swap 更是丁点不剩。

我见过吃内存的 mongod,可没见过大胃口的 mongod 啊。不过以前我也没怎么见到在这么大内存的机器上跑的 mongod。不过不管如何,把 swap 全吃掉总归是不对的。

于是翻了翻 mongodb 源码,发现出现这种情况还真是机器的配置的问题。代码里有这么一段(在 GitHub 上的位置):

wiredtiger_init.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
if (cacheSizeGB == 0) {
    // Since the user didn't provide a cache size, choose a reasonable default value.
    // We want to reserve 1GB for the system and binaries, but it's not bad to
    // leave a fair amount left over for pagecache since that's compressed storage.
    ProcessInfo pi;
    double memSizeMB = pi.getMemSizeMB();
    if (memSizeMB > 0) {
        double cacheMB = (memSizeMB - 1024) * 0.6;
        cacheSizeGB = static_cast<size_t>(cacheMB / 1024);
        if (cacheSizeGB < 1)
            cacheSizeGB = 1;
    }
}

大概这就是决定它自己要用多少内存的代码了。先留出1G,然后再留出40%,剩下的能吃就吃!于是,好几只 mongod 开始抢食了!默认vm.swappiness=60的内核看到内存快用完了,于是开始往 swap 挪。结果造成内核挪多少,mongod 吃多少……

这种情况在机器内存少的时候没有出现,大概是因为内存少的时候,mongod 留出的比例比较高,内核就没那么卖力地把数据往 swap 上挪了。而且这次是好几只 mongod 哄抢呢。

转载于:https://www.cnblogs.com/bonelee/p/8366050.html

mongodb 3.2配置内存缓存大小为MB/MongoDB 3.x内存限制配置相关推荐

  1. 要怎么在计算机里清除桌面内存,电脑内存过大?教你如何清理电脑内存

    如果频繁使用电脑就会不断的累积很多系统垃圾,这样电脑磁盘很快就会被占满,那么如何彻底清理电脑内存呢?其实小编整理了有关清理电脑内存的方法,下面一起看下如何快速有效的帮助您解决电脑内存过大的问题吧. 最 ...

  2. python内存消耗大吗_如何减少python内存的消耗?

    标签: Python 打算删除大量涉及像C和C++语言那样的复杂内存管理.当对象离开范围,就会被自动垃圾收集器回收.然而,对于由Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情. ...

  3. iOS开发缓存机制之—内存缓存机制

    在IOS应用程序开发中,为了减少与服务端的交互次数,加快用户的响应速度,一般都会在iOS设备中加一个缓存的机制. 这篇文章将介绍一下如何在iOS设备中进行缓存,本文先介绍一下将内容缓存到内存中,下一篇 ...

  4. 关于 ASP.NET 内存缓存你需要知道的 10 点

    缓存机制的主要目的是提高应用程序的性能.作为 ASP.NET 开发人员,你可能会意识到 ASP.NET Web 窗体以及 ASP.NET MVC 可以使用 Cache 对象缓存应用程序的数据.这通常被 ...

  5. linux 大叶内存,hugepages大叶内存

    就Linux应用程序而言,使用的都是虚拟地址,当应用程序读写一个指定的虚拟地址时,内存管理单元会自动进行虚拟地址到物理地址的转换.一个虚拟 地址可以映射到多个物理地址,但当前映射到哪一个物理地址取决于 ...

  6. 计算机内存多大够用,Win10到底需要多大内存才够用,你知道吗

    Win10带来了语音助手.通知中心.Edge浏览器以及安全上的诸多改进,依然有人因为界面不够华丽,隐私保护有潜在威胁,体验中容易卡顿.蓝屏等诸多问题而选择不升级.如果你已经升级Win10,玩硬件的用户 ...

  7. linux 系统日志 查看被杀掉的进程(占用内存过大)

    基本概念: Linux 内核有个机制叫OOM killer(Out Of Memory killer),该机制会监控那些占用内存过大,尤其是瞬间占用内存很快的进程,然后防止内存耗尽而自动把该进程杀掉. ...

  8. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 内存复用 | 弱引用 | 引用队列 | 针对不同 Android 版本开发不同的 Bitmap 复用策略 | 工具类代码 )

    文章目录 一.Bitmap 复用池 二.弱引用 Bitmap 内存释放 三.从 Bitmap 复用池中获取对应可以被复用的 Bitmap 对象 1.Android 2.3.3(API 级别 10)及以 ...

  9. 内存缓存LruCache实现原理

    自己项目中一直都是用的开源的xUtils框架,包括 BitmapUtils.DbUtils.ViewUtils和HttpUtils四大模块,这四大模块都是项目中比较常用的.最近决定研究一下 xUtil ...

最新文章

  1. 卷积神经网络(CNN)张量(图像)的尺寸和参数计算(深度学习)
  2. 哪种 Python IDE 最适合你?这里有一份优缺点列表
  3. java多态强制类型转换_java多态和强制类型转换
  4. NYOJ 595 乱七八糟
  5. linux sed命令整行替换:将`PermitRootLogin`行替换成`PermitRootLogin yes`
  6. 基于pythonselect.select模块通信的实例讲解
  7. wxWidgets:wxBitmapComboBox类用法
  8. 【算法设计与分析】15 分治策略:芯片测试
  9. 站在“巨人”的肩膀上运维
  10. Linux常用的基本命令08
  11. android手势_Android手势检测器
  12. 点云入门笔记(一):点云数据及获取
  13. isalpha、isalnum、islower、isupper等字符函数
  14. IDEA修改快捷键方法(在原快捷键不变的基础上增加自己习惯的快捷键)
  15. Sigmoid Belief Net
  16. 原生JS写一个首字母排序的通讯录效果
  17. mysql保留小数点后一位 进位处理_请问EXCEL保留小数点后一位时是如何修约的?
  18. linux shell 操作二进制文件(xxd、dd)
  19. https网站打不开如何解决
  20. Redis入门指南:深入了解这款高性能缓存数据库

热门文章

  1. Python2和python3字符编码的区别
  2. matlab中antoine方程应用,五参数antoine方程
  3. python直方图均衡函数_Python中的自适应直方图均衡
  4. sas数据集怎么导出_PCA算法 | 数据集特征数量太多怎么办?用这个算法对它降维打击!...
  5. 内存分配_go内存分配管理
  6. unity连接linux服务器,C#编程之C#通过SharpSSH库与Linux服务器建立SSH连接并执行命令...
  7. python【力扣LeetCode算法题库】121-买卖股票的最佳时机
  8. python【蓝桥杯vip练习题库】ADV-235阶乘差
  9. linux命令框显示中文乱码_CentOS终端命令行显示中文乱码的解决方法
  10. linux虚拟机上不了王,虚拟机上安装Linux时出现的问题及解决方法