设为首页 收藏本站
查看: 1264|回复: 0

[经验分享] MongoDB内存机制

[复制链接]

尚未签到

发表于 2018-10-27 15:17:01 | 显示全部楼层 |阅读模式
  Memory Mapped Storage Engine (MMAP)是目前MongoDB唯一的存储引擎,它使用内存映射文件来避免磁盘的IO,操作系统的虚拟内存管理器,下面是MMAP的几个特点:
  
1、由于是由os来进行内存的管理,所以在文件系统内存和数据库内存之间是没有冗余之分的。
  
2、MongoDB可以不经过配置自动使用os剩余的内存
  
3、虚拟内存的大小和驻留内存的大小会显示出MongoDB process 占用很多的内存,这是因为虚拟内存的大小是映射文件和日志文件的总和,常驻数据所占用的内存取决于系统的剩余内存。
  
4、缓存的数据会使用LRU算法进行部分清除。映射文件的写入也是由操作系统进行控制的。
  

  
可以通过db.serverStatus().mem; 查看数据库内存的使用情况;
  

  
db.serverStatus().mem;
  
{
  "bits" : 32,
  "resident" : 23,
  "virtual" : 107,
  "supported" : true,
  "mapped" : 0
  }
  

  

  (刚刚安装的所以基本上没有什么使用率)。
  
使用shell>mongostat 也是可以的。
  

  
Sun Sep 2 21:55:59 [initandlisten] connection accepted from 127.0.0.1:54693 #3 (1 connection now open)

  
insert query update delete getmore command flushes mapped vsize res faults locked db>  
0 0 0 0 0 1 0 0m 107m 23m 0 local:0.0% 0 0|0 0|0 62b 1k 1 21:56:00
  
0 0 0 0 0 1 0 0m 107m 23m 0 local:0.0% 0 0|0 0|0 62b 1k 1 21:56:01
  

  

  

  Mongodb 每个连接内存使用情况:
  
每个连接启用一个线程,每个线程有一个具有几MB大小的堆栈。如果某个线程已经停止使用,那么os就会把它的堆栈剩余的部分交换出去。
  
Binary footprint:
  
通过启动一个新的MongoDB实例,在没有任何连接,没有任何数据的情况下,我们可以得到the “inherent” memory 占有率的情况。
  

  
基于以上的说明,我们有时候需要控制Mongodb占用的内存.(最好不要把其他服务和Mongodb放在一起).
  
即便MongoDB使用的是64位操作系统,也有可能遇到linux OOM的问题.大部分情况下是限制了虚拟内存的大小所致. 可以通过 ulimit -a | grep 'virtual' 进行查看:
  
virtual memory (kbytes, -v) unlimited
  
大部分的操作系统是没有限制的.
  
MongoDB连接数过多的话,也可能影响性能,连接数可以这样查询:
  
> db.serverStatus().connections{ "current" : 1, "available" : 818 }每个线程都需要一个stack,如果默认stack比较大的话,视情况减小.通过一下命令来释放掉MongoDB占用的内存.db.runCommand({closeAllDatabases:1})
  参考:http://www.mongodb.org/display/DOCS/Caching
  http://www.searchdatabase.com.cn/showcontent_51990.htm
  




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-627223-1-1.html 上篇帖子: centos5.7 mongodb 安装与测试 下篇帖子: MongoDB笔记二之创建、更新及删除文档
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表