关于mongoDB使用中占用过高内存的问题优化

因为MongoDB的内存是系统的虚拟内存管理的,MongoDB并不干涉内存管理工作,这样虽然可以简化Mongo的工作,但同时Mongo的内存使用是没法控制的。 真的没法控制?办法是有的,可以通过ulimit 来控制用户进程的虚拟地址空间的大小。 ulimit 是控制着所有进程的内存大小,怎么针对MongoDB进行控制呢?

因为MongoDB的内存是系统的虚拟内存管理的,MongoDB并不干涉内存管理工作,这样虽然可以简化Mongo的工作,但同时Mongo的内存使用是没法控制的。  
真的没法控制?办法是有的,可以通过ulimit 来控制用户进程的虚拟地址空间的大小。 
ulimit 是控制着所有进程的内存大小,怎么针对MongoDB进行控制呢? 其实可以变通的,我们在自己linux里使用一个用户来运行MongoDB,其它程序用其它用户进行运行。因为ulimit是可以限制指定用户资源的. 

通过ulimit -a来查看所有可以修改的资源 

118 ~ >>ulimit -a @root
-t: cpu time (seconds) unlimited
-f: file size (blocks) unlimited
-d: data seg size (kbytes) unlimited
-s: stack size (kbytes) 8192
-c: core file size (blocks) 0
-m: resident set size (kbytes) unlimited
-u: processes 1024
-n: file descriptors 1024
-l: locked-in-memory size (kb) 64
-v: address space (kb) unlimited
-x: file locks unlimited
-i: pending signals 15661
-q: bytes in POSIX msg queues 819200
-e: max nice 0
-r: max rt priority 0


这里我们修改的是 ulimit -v: address space(kb) 选项 也就是用户进程的最大虚拟地址空间。 
我们新建个用户cb,在启动mongod之前 
ulimit -v 10000000 修改最大虚拟地址空间为10G 
当使用llimit的时候注意该命令是有上下文的,最好在脚本内使用,然后直接执行mongoDB的程序


以上是一种方案,但是比较麻烦,现在说一种简便的方法

/usr/local/mongodb/bin/mongod --dbpath=/data/mongodb/data/ --fork --logpath=/data/mongodb/logs/mongod.log --logappend --wiredTigerCacheSizeGB 8

启动的时候加上--wiredTigerCacheSizeGB 这个参数

切记:不要指定太低的内存,既然选择了人家,就给人家点资源好好干活,不要限制太死,不然就要重新考虑架构方案了

  • 发表于 2018-06-28 22:52
  • 阅读 ( 280 )
  • 分类:大数据

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
不写代码的码农
张鹏

大数据工程师

94 篇文章

作家榜 »

  1. 张鹏 94 文章
  2. 0 文章
  3. 赵科 0 文章
  4. 王孖珺397954227 0 文章