ITPub博客

首页 > 应用开发 > IT综合 > mongo内存笔记

mongo内存笔记

原创 IT综合 作者:G8bao7 时间:2015-11-03 10:25:54 0 删除 编辑


内存分配策略:
内存 > 索引 + 热数据 + 连接数*Stack(ulimit -a | grep stack ),另外,操作系统本身正常运转也需要消耗一部分内存

虚拟内存大小限制
# 查看
shell> ulimit -a | grep 'virtual'

# 关闭,避免OOM
shell> ulimit -v unlimited

连接占用内存
# 查看当前连接数
mongo> db.serverStatus().connections
每个连接默认分配内存为Stack
    # 查看Linux下缺省的Stack
    shell> ulimit -a | grep stack 
   
stack size              (kbytes, -s) 10240
    # 设置Stack
   
# 注:ulimit的使用是有上下文的,最好放在MongoDB的启动脚本里。
    shell> ulimit -s 1024

查看数据、索引大小
mongo> db.stats() 
{ 
"dataSize" : 1004862191980, 
"indexSize" : 1335929664 
}

内存释放
重启服务
内置closeAllDatabases命令
mongo> use admin 
mongo> db.runCommand({closeAllDatabases:1})
调整内核参数drop_caches
shell> sysctl -w vm.drop_caches=1


内存监控使用情况
mongo命令行
mongo> db.serverStatus().mem: 
{ 
"resident" : 22346, 
"virtual" : 1938524, 
"mapped" : 962283 
}

mongostat命令
shell> mongostat 
mapped  vsize    res faults 
 940g  1893g  21.9g      0


其中内存相关字段的含义是:
mapped:映射到内存的数据大小
visze:占用的虚拟内存大小
res:占用的物理内存大小 
注:如果操作不能在内存中完成,结果faults列的数值不会是0,视大小可能有性能问题。
在上面的结果中,vsize是mapped的两倍,而mapped等于数据文件的大小,所以说vsize是数据文件的两倍
之所以会这样,是因为本例中,MongoDB开启了journal,需要在内存里多映射一次数据文件,
如果关闭journal,则vsize和mapped大致相当。
如果想验证这一点,可以在开启或关闭journal后,通过pmap命令来观察文件映射情况:
shell> pmap $(pidof mongod)


来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/26250550/viewspace-1821314/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-11-04

  • 博文量
    496
  • 访问量
    1258290