2016-07-28 155 views
0

我们的CentOS-07服务器内存使用率高达mongodb,它有64 GB的RAM。这是一个独立的mongodb实例,它没有任何应用程序运行并且有管理脚本的功能只能保留相关数据。我们没有索引数据。磁盘上的数据总大小为81千兆字节。在我们尝试启用复制之前,没有看到这个问题,因为节点设置已经使用高内存,所以被禁用,然后我们提出了一个新的独立的mongo实例。从我们尝试重新启动mongo服务器开始,内存使用情况一直没有下降,但没有奏效。是否有任何理由让mongodb使用这么多内存?下面是一个链接,指向使用的mem使用情况的快照来自站点服务器。 蒙戈版本是2.6.5mongodb内存使用突然激增

Image link

回答

0

这并不奇怪。见Memory Use节中的文档的MMAPv1存储引擎(这是MongoDB的2.6用途):

随着MMAPv1,MongoDB的自动使用所有可用内存的机器作为它的缓存上。系统资源监视器显示MongoDB使用大量内存,但它的用法是动态的。如果另一个进程突然需要一半的服务器RAM,MongoDB会将缓存的内存缓存到另一个进程。

在启用复制之后,用法刺激也就不足为奇了,因为它听起来像您拥有完全填充的数据库,然后添加了副本成员。这意味着副本成员需要执行来自该节点的数据的初始同步,这将需要读取每个将“引发”MongoDB缓存的文档。

+0

服务器现在只是一个独立的mongo实例,就像在启用复制之前一样。服务器然后没有任何内存问题,但启用和禁用复制并使其成为mongo的独立实例后,我们看到内存突然激增,并导致服务器不断重新启动,即使在复制成员上使用两天后,内存使用率也没有下降,这就是为什么我们禁用复制并使每台服务器成为独立实例的原因的mongo。 –

+0

“它导致服务器不断重启” - 现在我们遇到了真正的问题。你看我想说的是,MongoDB通常会使用它所能存储的所有内存。单独运行时没有看到内存高的事实并不完全相关。最终,即使独立使用,内存使用量也应该增加。 你在同一台服务器上运行多个mongod吗?你在Windows上运行吗?你在mongod服务器上运行其他进程吗? – helmy

+0

如果是linux,它可能是OOM杀手,你需要配置一些交换。请参阅https://docs.mongodb.com/manual/administration/production-notes/#swap – helmy