问题出现

自己有一个测试用的服务器,配置很低。年前出现几次问题,重启后就好了也就没注意。后来越来越频繁就调查了一下,发现重启后内存就一直增长直到接近100%。使用ps aux查看cpu和内存使用情况,发现mongo占用了大部分的内存,这是什么情况?

mongo3.2

因为服务器搭建有些年头了,mongo的版本一致没升级,停留在3.2版本上。查阅相关资料发现是默认设置导致的,mongo3.2有一段官方描述如下:

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.

简单来说就是内存占用在下面两种情况中取最大值:

1、RAM的60%,并且这个60%要大于1GB

2、1GB

因为我的服务器是测试用,所以配置很低内存只有1GB,也就是说mongo默认就要全占了,怪不得内存一直100%。

但是mongo配置是可以改动的,有两种方式。

一种是修改mongod.conf文件,设置cacheSizeGB参数:

...
storage:dbPath: /var/lib/mongodbjournal:enabled: truewiredTiger:engineConfig:cacheSizeGB: xx
...

另外一种就是如果使用命令启动,那么启动时可以添加参数:

--wiredTigerCacheSizeGB=xx

但是!

mongo的3.2版本这个cacheSizeGB参数是int类型,如果使用小数就会报错

Error parsing option “wiredTigerCacheSizeGB” as int: Bad digit “.” while parsing 0.3

所以最低只能是1GB!这样我这种低配服务器就没戏了。。。

mongo3.4

应该是官方也意思到这个问题了,所以在mongo的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.

可以看到,在这个版本中cacheSizeGB类型变成float了,也就是说可以用小数了。

而且默认配置也发生了改变:

1、50%的RAM,同样要求这50%大于1GB

2、256M

简单来说就是如果RAM大于2GB,就取50%。否则就直接使用256M,而且我们自定义的时候可以使用小数,这样就非常合理了。

解决

这样我们先将mongo升级到3.4及以上版本即可。

如果要自己配置的话,也需要先停止mongo,官方的做法是通过命令mongo进入数据库,然后

> use admin;                    --使用管理员数据库
> db.shutdownServer();

然后可以通过上面提到的两种方式进行修改:

1、修改mongod.conf文件,重启mongo

2、使用命令启动mongo的同时添加wiredTigerCacheSizeGB参数

mongo占用内存过大解决方案相关推荐

  1. Unity3D占用内存太大的解决方法【先转,慢慢看】

    2019独角兽企业重金招聘Python工程师标准>>> Unity3D占用内存太大的解决方法 最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unit ...

  2. unity3d占用内存太大解决方法

    原帖:http://www.onevcat.com/2012/11/memory-in-unity3d/ 转载自星辰 Unity3D占用内存太大的解决方法 最近网友通过网站搜索Unity3D在手机及其 ...

  3. Unity3D占用内存太大怎么解决

    最近网友通过网站搜索Unity3D在手机及其他平台下占用内存太大. 这里写下关于Unity3D对于内存的管理与优化. Unity3D 里有两种动态加载机制:一个是Resources.Load,另外一个 ...

  4. paip mysql 5 6 数据库 占用 内存 过多 的 解决方案

    paip.mysql 5.6 占用 内存 过多 的 解决方案 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.cs ...

  5. mysql 5.6 数据库 占用 内存 过多 的 解决方案

    mysql 5.6 占用 内存 过多 的 解决方案 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.csdn.ne ...

  6. paip.mysql 5.6 数据库 占用 内存 过多 的 解决方案

    paip.mysql 5.6 占用 内存 过多 的 解决方案 作者Attilax ,  EMAIL:1466519819@qq.com  来源:attilax的专栏 地址:http://blog.cs ...

  7. 【T+】畅捷通T+在运行时sqlserver占用内存过大,导致电脑卡顿。

    [问题现象] 畅捷通T+软件在运行时 Sql server 占用内存过大, 导致电脑卡顿. [解决方案] 在数据库中修改服务器内存大小来控制占用内存. 1.打开 Microsoft SQL Serve ...

  8. SQL Server 2008 R2占用内存越来越大解决方法

    SQL Server 2008 R2占用内存越来越大解决方法 参考文章: (1)SQL Server 2008 R2占用内存越来越大解决方法 (2)https://www.cnblogs.com/pe ...

  9. C# Winform应用程序占用内存较大解决方法整理(转)

    C# Winform应用程序占用内存较大解决方法整理(转) 参考文章: (1)C# Winform应用程序占用内存较大解决方法整理(转) (2)https://www.cnblogs.com/xcsn ...

最新文章

  1. oracle 11g RAC Grid Infrastructure
  2. 数据智能与计算机图形学领域推荐论文列表
  3. c语言判断文件是否建立成功,C语言编程之怎样判断某一文件是否存在
  4. vue修改计算属性的值_八.Vue计算属性
  5. python spark视频_Spark2.x+Python大数据机器学习视频课程
  6. spring boot java app_利用spring boot创建java app
  7. python打印日历代码_带tkinter的日历(打印所选日期)
  8. BZOJ.3648.寝室管理(点分治 树状数组)
  9. Python中selenium的玩法,小朋友看了都说学会了
  10. UVA10579 Fibonacci Numbers【大数】
  11. 布局优化之ViewStub、Include、merge使用分析
  12. JDBC01 mysql和navicat的安装
  13. “绿坝—花季护航”使用全攻略
  14. 机器学习算法工程师在做什么?
  15. 中国人工智能AI人才需求现状
  16. [多媒体] 10大开源视频剪辑软件
  17. 12.flowable 流程实例 终止流程
  18. 规模化敏捷转型中,哪些问题会被经常问到?
  19. cuda编程思想和opencv_gpu图像处理
  20. Linux六种进程状态R、S、D、T、Z、X

热门文章

  1. 区分Activity的四种加载模式(转)
  2. SQL Server 2008 BIDS组件的安装
  3. Android笔记 Application对象的使用-数据传递以及内存泄漏问题
  4. step2 . day1 Linux和C语言的高级应用
  5. 第五届新疆ACM H-虚无的后缀
  6. oracle大量数据删除
  7. CSS之引入方式和选择器
  8. operator、explicit与implicit
  9. select()函数用法
  10. poj 1118 Lining Up(水题)