mongodb占物理内存,我们一台服务器8G内存,没有开mongodb的时候,物理内存只占11%,当开了mongodb,mongodb进程的内存显示是60M,但物理内存已经是99%,请问是什么原因?有没有优化的办法,我们是在WINDOWS系统.
大家讲道理2017-04-24 09:15:16
mongodb本身是不做内存管理的,它的内存管理完全依赖于系统。你可以用系统性能监视器看下内存和虚拟内存。简单点来说你有多少内存mongdb就会吃多少,就是这么贪得无厌,它会把绝大部分热数据都会放在内存里来提升性能,毕竟这也是它的优点。
我们的服务器是windows server 2008,有32G内存,运行了一段时间后,也是被吃光光,但性能让人惊喜,但那台服务器上不光只有mongodb,所以经常影响到其他程序,后来我们尝试用 windows的系统资源管理器WSRM,限制mongodb进程的内存,确实有效果你可以尝试一下。
但是我是前年开始使用mongodb的,当时版本比较老,限制内存后mongodb很不稳定,偶尔挂掉,看日志显示大体意思是找不到映射的内存了。所以后来我们放弃了限制内存,改用每天定点用程序使用mongodb的命令释放内存{closeAllDatabases:1}
这个命令也是有成本的,会阻塞到命令完整,而且刚释放完后效率会降低,要经过一段时间的“热身”才能慢慢恢复。
我觉得后面这种方法不错,并且通过这两年的观察一切都比较稳定。当然你们要是能单独给mongodb一台服务器那是再好不过的了。
迷茫2017-04-24 09:15:16
新的 MongoDB 引擎会认为自己是系统中唯一重要的服务,因此会尽量占用内存来作为自己的缓存(不是操作系统的缓存)。如果你需要为其它进程保留内存,或者有多个 MongoDB 实例,可以使用 --cacheSizeGB
参数来限制 MongoDB 的缓存大小。