MongoDB复制WIndows RAM问题



我有两台运行Windows服务器2012 R2的生产服务器。作为主服务器和辅助服务器,它们用于故障切换场景,如果其中一个发生故障,另一个将承担负载。

我的应用程序正在使用MongoDB复制。我有3个例子。主节点和仲裁器(我将把它移到另一台服务器上,这只是一个临时的灵魂)以及辅助服务器上的辅助节点。

一段时间后,两台服务器上的RAM消耗都变得非常高。MongoDB占用了所有可用的RAM使用,并没有发布它。我注意到只有当MongoDB在副本中工作时才会出现这种行为。

我做了一些研究,发现不可能限制mongod进程本身的RAM使用。我对MongoDB使用所有RAM有点怀疑。

请分享你的经验、想法或想法,如何限制我的windows服务器上mongodb进程的RAM使用。

  rs.status()"set": "XXXXXX",
"date": ISODate("2015-03-03T13:35:39.000Z"),
"myState": 1,
"members": [
    {
    "_id": 1,
    "name": "Server1:3000",
    "health": 1,
    "state": 1,
    "stateStr": "PRIMARY",
    "uptime": 67557,
    "optime": Timestamp(1425389739,
    19),
    "optimeDate": ISODate("2015-03-03T13:35:39.000Z"),
    "electionTime": Timestamp(1425322202,
    1),
    "electionDate": ISODate("2015-03-02T18:50:02.000Z"),
    "self": true
    },
    {
    "_id": 2,
    "name": "Abritrer1:3001",
    "health": 1,
    "state": 7,
    "stateStr": "ARBITER",
    "uptime": 67547,
    "lastHeartbeat": ISODate("2015-03-03T13:35:38.000Z"),
    "lastHeartbeatRecv": ISODate("2015-03-03T13:35:39.000Z"),
    "pingMs": 0
    },
    {
    "_id": 3,
    "name": "Server2:3000",
    "health": 1,
    "state": 2,
    "stateStr": "SECONDARY",
    "uptime": 67542,
    "optime": Timestamp(1425389737,
    26),
    "optimeDate": ISODate("2015-03-03T13:35:37.000Z"),
    "lastHeartbeat": ISODate("2015-03-03T13:35:37.000Z"),
    "lastHeartbeatRecv": ISODate("2015-03-03T13:35:38.000Z"),
    "pingMs": 1,
    "syncingTo": "Server1:3000"
    }
],
"ok": 1
}

出于这个原因,我们不再在生产环境中使用MongoDB。强迫Mongo放弃内存并不容易,将Mongo本身限制在一定的内存限制内也同样尴尬。

如果你使用的是Windows Server 2012,你可以安装Windows系统资源管理器,它应该允许你修复Mongo进程的最大工作集大小,尽管我自己还没有尝试过。

您可能会发现以下关于将进程限制为特定大小的博客文章非常有用。

http://blogs.technet.com/b/clinth/archive/2012/10/11/can-a-process-be-limited-on-how-much-physical-memory-it-uses.aspx

除非你在Windows Server机器上,否则我不确定你可以使用什么其他工具来进行更改,但限制操作系统分配的最大工作集似乎是最好的方法。

祝你好运!

编辑-作为一种想法,如果你的集合中有很多数据,Mongo的内存使用率总是会很高,但这并不总是意味着内存被使用了。与Java和C#为垃圾回收分配内存的方式类似,Mongo将最近使用较少的页面标记为可回收页面。如果另一个进程请求内存,Mongo应该释放一些不太常用的页面来提供空间。当你看到Mongo占用了超过3Gb的系统内存时,你会有点担心,但这并不总是看起来那么大的问题。

作为测试,您可以尝试在Mongo使用率达到峰值时启动一个内存不足的应用程序,看看它是否释放了一些内存。如果是这样的话,您可以简单地让Mongo根据自己的意愿处理内存使用情况(尽管在您的位置上,我更愿意确切地了解什么是空闲内存,什么不是)。

Mongo常见问题解答中关于内存映射文件的部分对此进行了介绍。http://docs.mongodb.org/manual/faq/storage/

最新更新