新版Mongodb

时间:2016-08-14 10:45:01

标签: mongodb server windows-services windows-server-2012 production-environment

我在Windows服务器2012上使用Mongodb超过两年了。自上次更新以来,一些奇怪的问题开始发生,最终导致整个RAM内存的使用。

为Mongodb配置的服务如下:

logpath=d:\data\log\mongod.log 
dbpath=d:\data\db
storageEngine=wiredTiger
rest=true

#override port
port=27017

#configsvr = true
shardsvr = true

为了限制Cache内存的使用,我们增加了以下一行:

wiredTigerCacheSizeGB=10

这就是奇怪的东西开始发生的地方。当我检查任务管理器时,它说现在Mongodb实际上限制为10GB,因为我在服务中定义但它实际上使用了超过10GB。

在第一张图片中,您可以看到按RAM消耗排序的内存消耗

enter image description here

事实上,我使用的机器总共有28GB enter image description here

这种疯狂的消费导致我正在运行的脚本失败,即使是最基本的脚本,即使我只运行简单的查询,例如' count'或者' distinct',我相信这是内存消耗的直接结果。

当我检查日志文件时,我看到有许多打开的连接,即使会话结束,也表明仍然打开了相同数量的连接:

enter image description here

所以最后我有两个主要问题: 1.有没有办法在不降级Mongodb版本的情况下解决这个问题? 2.配置文件看起来正确吗?是有必要的一切吗?

1 个答案:

答案 0 :(得分:2)

WiredTiger中的内存使用情况是一个两级缓存:

  • 首先是由--wiredTigerCacheSizeGB
  • 控制的WiredTiger缓存
  • 其次是操作系统文件系统缓存。 MongoDB自动使用WiredTiger缓存或其他进程未使用的所有可用内存

另见WiredTiger memory usage

对于OS文件系统缓存,MongoDB不管理它直接使用的内存 - 它允许操作系统管理它。如果可以的话,Windows将尝试使用每一个物理内存的最后一块 - 但是如果其他进程请求内存,它将会被抛出并且将被抛出。

另一种方法是在容器(例如lxc,cgroups,Docker等)中运行mongod,该容器无法访问系统中可用的所有RAM。

说了上面的话:

  • 您还在服务器中运行另一个数据库,即mysqld。与某些数据库一样,MongoDB在专用服务器上的性能会更好,以减少内存争用。

  • 任务管理器显示mongod正在使用10GB,尽管该机器最多使用~28GB。这可能是mongod,也可能不是val1,因为您也有其他流程。

有用的资源: